2011-11-30 9 views
12

मेरे पास निम्न आदेश है: sed -i -e '/match1/,+2d' filex, जो "फ़ाइल x" फ़ाइल में "match1" मैच खोजने के बाद 2 लाइनों को हटा देता है। मैं मैच 1, मैच 2 की तरह कई मैचों को जोड़ना चाहता हूं ....मिलान/मैचों के बाद 2 लाइनों को हटाने के लिए मैं "sed" का उपयोग कैसे कर सकता हूं?

तो यह किसी भी मैच को खोजने के बाद 2 लाइनों को हटा देगा, मैं इसे कैसे प्राप्त कर सकता हूं?

+0

आपको दिया जा सकता है एक इनपुट/आउटपुट उदाहरण यह स्पष्ट करने के लिए कि आप क्या उम्मीद करते हैं? – sehe

+0

क्या आपके मामले में स्पष्ट '/ match1 /, + 2d;/match2 /, + 2d' के साथ कुछ गलत है? यह ओवरलैप को पहचान नहीं पाएगा, लेकिन आपकी मूल अभिव्यक्ति भी नहीं है। – thiton

+0

[sed या awk के संभावित डुप्लिकेट: पैटर्न के बाद एन लाइनों को हटाएं] (https://stackoverflow.com/questions/4396974/sed-or-awk-delete-n-lines-following-a-pattern) –

उत्तर

20

दो तरीके, SED संस्करण और मंच पर निर्भर करता है:

sed -e '/match1/,+2d' -e '/match2/,+2d' <oldfile> newfile 

या

sed -e '/match1\|match2/,+2d' <oldfile> newfile 
+0

धन्यवाद आदमी यह वही है जो मैं – wael

+3

चाहता हूं तो यह एक स्वीकार्य उत्तर क्यों नहीं है? – Drew

5

नहीं एसईडी उपयोगकर्ता लेकिन मुझे लगता है कि आप इस्तेमाल कर सकते हैं:

sed -i -e '/(match1|match2)/,+2d' filex 

अन्यथा आप कर सकते हैं, यदि आपके लिए ऐसा करना संभव है, तो करें:

sed -i -e '/match1/,+2d' filex && sed -i -e '/match2/,+2d' filex 

संपादित करें: ऐसा लगता है कि मेरे पास सही विचार था लेकिन ज़ियू इसे मिला।

4

अगर मैं तुम्हें सही ढंग से समझ, आप

sed -e '/match1/,+2d' input.txt 

उदाहरण के लिए चाहते हैं, seq 10 | sed '3i match1' > input.txt साथ इनपुट बनाएँ:

1 
2 
match1 
3 
4 
5 
6 
7 
8 
9 
10 

sed -e '/match1/,+2d' input.txt के उत्पादन होगा:

1 
2 
5 
6 
7 
8 
9 
10 
संबंधित मुद्दे

 संबंधित मुद्दे