यह मानते हुए कि आप अपने पैटर्न के साथ जीएनयू के साथ पूरी लाइन का मिलान करना चाहते हैं sed
, यह काम करता है:
sed -n '/^dog 123 4335$/ { :a; n; p; ba; }' infile
मानक समकक्ष:
sed -ne '/^dog 123 4335$/{:a' -e 'n;p;ba' -e '}' infile
निम्नलिखित इनपुट के साथ ( infile
):
cat 13123 23424
deer 2131 213132
bear 2313 21313
dog 123 4335
cat 13123 23424
deer 2131 213132
bear 2313 21313
आउटपुट है:
cat 13123 23424
deer 2131 213132
bear 2313 21313
स्पष्टीकरण:
/^dog 123 4335$/
वांछित पैटर्न के लिए खोज करता है।
:a; n; p; ba;
एक लूप है जो इनपुट से एक नई लाइन प्राप्त करता है ( n
), इसे प्रिंट करता है ( p
), और शाखाओं को वापस लेबल करता है a :a; ...; ba;
।
अपडेट करें
यहाँ एक उत्तर है जो आपकी आवश्यकताओं के करीब आता है, यानी फ़ाइल 2 में पैटर्न, फ़ाइल 1 से पकड़ना:
tail -n +$(( 1 + $(grep -m1 -n -f file2 file1 | cut -d: -f1) )) file1
एम्बेडेड grep और कट फ़ाइल 2 से एक पैटर्न वाली पहली पंक्ति को ढूंढते हैं, यह लाइन नंबर प्लस एक पूंछ पर पारित की जाती है, प्लस एक पैटर्न के साथ लाइन को छोड़ना है।
यदि आप पहले मैच के बजाय पिछले मैच से शुरुआत करना चाहते हैं तो यह होगा:
tail -n +$(( 1 + $(grep -n -f file2 file1 | tail -n1 | cut -d: -f1) )) file1
ध्यान दें कि पूंछ के सभी संस्करण प्लस-नोटेशन का समर्थन नहीं करते हैं।