साथ sedआप एक स्लाइडिंग खिड़की कर सकते हैं।
sed '1N;$!N;/141.299.99.1/P;D'
उसने ऐसा किया। लेकिन सावधान - उद्धृत करते हुए भीbash विस्तार का पागल व्यवहार ! ! अपने कमांड इतिहास से कमांड स्ट्रिंग में यह थोड़ा पागल हो सकता है। set +H;यदि आप पाते हैं कि यह मामला है, तो कमांड को उपसर्ग करें । फिर इसे पुनः चालू करने के (लेकिन क्यों ???) कर set -Hबाद में।
यह, ज़ाहिर है, केवल तभी लागू होगा जब आप उपयोग कर रहे थेbash - हालांकि मुझे विश्वास नहीं है कि आप हैं। मुझे पूरा यकीन है कि आप साथ काम कर रहे हैं csh- (जो ऐसा शेल होता है जिसका पागल व्यवहार bashइतिहास के विस्तार के साथ अनुकरण करता है, लेकिन शायद चरम सीमा तक सी शेल ने इसे नहीं लिया है) । तो शायद एक \!काम करना चाहिए। मुझे उम्मीद है।
यह सभी पोर्टेबल कोड है: POSIX अपने तीन ऑपरेटरों का वर्णन करता है : (हालांकि यह ध्यान देने योग्य है कि मैंने केवल इस विवरण की पुष्टि की है कि यह विवरण 2001 तक मौजूद है)
[2addr]Nमूल सामग्री से संलग्न सामग्री को अलग करने के लिए \nएम्बेडेड स्पेस का उपयोग करके पैटर्न स्पेस के लिए
इनपुट की अगली पंक्ति को कम करें, इसकी समाप्ति ईलाइन को लागू करें \n। ध्यान दें कि वर्तमान लाइन संख्या बदल जाती है।
[2addr]P
पैटर्न स्पेस को लिखें, पहली \nआउटपुट तक, स्टैंडर्ड आउटपुट तक।
[2addr]D
पैटर्न स्पेस के शुरुआती सेगमेंट को पहली \nईलाइन के माध्यम से हटाएं और अगला चक्र शुरू करें।
तो पहली पंक्ति पर आप पैटर्न स्पेस के लिए एक अतिरिक्त लाइन जोड़ते हैं, इसलिए यह इस तरह दिखता है:
^line 1s contents\nline 2s contents$
उसके बाद पहली पंक्ति और उसके बाद हर पंक्ति - अंतिम को छोड़कर - आप पैटर्न अंतरिक्ष में एक और पंक्ति जोड़ते हैं। तो यह इस तरह दिखता है:
^line 1\nline 2\nline 3$
यदि आपका आईपी पता आपके भीतर पाया जाता है P, तो आप पहली नई पंक्ति तक पहुँचते हैं, इसलिए यहाँ केवल 1 पंक्ति। हर चक्र के अंत में आप Dएक ही समान करते हैं और जो शेष रहता है उसके साथ शुरू करते हैं। तो अगला चक्र ऐसा दिखता है:
^line 2\nline 3\nline 4$
...और इसी तरह। यदि आपका आईपी उन तीनों में से किसी एक पर पाया जाता है तो सबसे पुराना प्रिंट आउट होगा - हर बार। इसलिए आप हमेशा केवल तीन पंक्तियों के आगे रहें ।
यहाँ एक त्वरित उदाहरण है। मुझे शून्य में समाप्त होने वाली प्रत्येक संख्या के लिए तीन लाइन का बफर प्रिंट होगा:
seq 10 52 | sed '1N;$!N;/0\(\n\|$\)/P;D'
10
18
19
20
28
29
30
38
39
40
48
49
50
यह आपके मामले की तुलना में थोड़ा अधिक जटिल है क्योंकि मुझे 0\nया तो न्यूलाइन या 0$पैटर्न स्पेस के अंत से लेकर आपकी समस्या से अधिक घनिष्ठता से मिलना था - लेकिन वे इसमें अलग-अलग हैं कि इसके लिए एक एंकर की आवश्यकता होती है - जिसे करना थोड़ा मुश्किल हो सकता है पैटर्न-स्पेस लगातार बदलता रहता है।
मैंने यह दिखाने के लिए 10 और 52 के विषम मामलों का उपयोग किया कि जब तक एंकर लचीला है तब तक आउटपुट है। पूरी तरह से, मैं एल्गोरिथ्म पर गिनती करने और करने के बजाय एक ही परिणाम प्राप्त कर सकता हूं:
seq 10 52 | sed '1N;$!N;/[90]\n/P;D'
और मेरी विंडो को सीमित करते हुए खोज को चौड़ा करें - 0 से 9 और 0 से और 3 लाइनों से दो तक।
वैसे भी, तुम्हें अंदाजा मिल गया।