किसी फाइल में होने वाली कई लाइनों को कैसे हटाएं?


11

कहो मेरे पास यह 857835 लाइन फाइल है, जिसमें इस तरह से सामान हैं:

a1
rubbish1
rubbish2
rubbish3
rubbish4
a1
rubbish5
rubbish6
rubbish7
rubbish8

और मैं a1और अगली पंक्ति ( rubbish1और rubbish5इस उदाहरण में) की सभी घटनाओं को दूर करना चाहता हूं । मैं यह कैसे करुं?

मैंने grep 'a1' -v -A1कोई फायदा नहीं उठाने की कोशिश की है, और मेरे सेड स्किल्ज़ वास्तव में महान नहीं हैं:}

मेरा Google-फू इस बार मेरी मदद करने में सक्षम नहीं है, कोई कृपया मदद करें!

जवाबों:


16

प्रयत्न:

sed -e '/^a1$/,+1d' "filename"

इसका मतलब / ^ a1 $ / से अगली पंक्ति तक, हटाएं

^ और $ सुनिश्चित करें कि आप पूरी लाइन से मेल खाते हैं, इसलिए एक छिपा हुआ a1 का मिलान नहीं किया जाएगा।


6
आप चाहते हैं ^और $उस मैच में, पूरी रेखाओं के मिलान के लिए मजबूर कर सकते हैं।
जैंडर

@ जेंडर: ज़रूर, सही किया
asoundmove

12

निम्नलिखित गैर-जीएनयू पर काम करेगा sed( ,+1एड्रेस सिंटैक्स एक GNU एक्सटेंशन है):

sed -e '/^a1$/,/^/d' my_file >my_filtered_file

"एक पंक्ति पर शुरू करना जो वास्तव में 'a1' को पढ़ता है, और अगली पंक्ति पर समाप्त होता है जिसके लिए लाइन की शुरुआत मौजूद है (अर्थात अगली पंक्ति), हटाएं।"

यह @ asoundmove के उत्तर की तुलना में बहुत कम एक्स्टेंसिबल है, हालांकि, एक अलग संख्या में लाइनों को हटाने से पूरी तरह से अलग स्क्रिप्ट मिलेगी।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.