मेरे पास यह फाइल है:
sometext1{
string1
}
sometext2{
string2
string3
}
sometext3{
string4
string5
string6
}
मैं एक विशिष्ट स्ट्रिंग के लिए इस फ़ाइल को खोजना चाहता हूं और इस स्ट्रिंग से पहले सब कुछ प्रिंट करना चाहता हूं {
और इस स्ट्रिंग के समापन के बाद सब कुछ }
। मैंने इसे sed के साथ हासिल करने की कोशिश की, लेकिन अगर मैंने श्रेणी में सब कुछ प्रिंट करने की कोशिश की, तो /{/,/string2/
यह sed प्रिंट करता है:
sometext1{
string1
}
sometext2{
string2
sometext3{
string4
string5
string6
}
अगर मैं स्ट्रिंग "string2" की खोज करता हूं, तो मुझे आउटपुट की आवश्यकता है:
sometext2{
string2
string3
}
धन्यवाद।
grep -n '' <infile | sed ...
। sed
आदेशों बदलाव की आवश्यकता होगी; विशेष रूप से /
एड्रेस /
बिट्स जो ^
टॉप-ऑफ-लाइन एंकर की तलाश में हैं। इसलिए, यदि आप मेरे उत्तर का उपयोग कर रहे थे तो आप शायद कर सकते थे grep -n '' | sed 'H;/{$/h;/^[^:]*:}/x;/{\n.*PATTERN/!d'
:। सभी आउटपुट लाइनों को मूल फ़ाइल की पंक्ति संख्याओं के साथ उपसर्ग किया जाएगा 1:sometext1{\n2:string1
और उसके बाद एक कॉलोन जैसे और इतने पर। sed
केवल वही फ़िल्टर करेगा जो पहले फ़िल्टर करेगा, सिवाय इसके कि प्रत्येक आउटपुट लाइन एक संख्या के साथ खुलती है।