2010-01-30 5 views
41

मेरे पास compar.txt नाम की एक टेक्स्ट फ़ाइल है जिसे मैं एक पंक्ति को निकालना चाहता हूं जो पैटर्न "nmse_gain_constant" वाली प्रत्येक पंक्ति का पालन करती है। निम्न आदेश मुझे बंद कर देता है:संदर्भ रेखाओं के साथ grep का उपयोग करते समय मैं लाइन विभाजक से कैसे छुटकारा पा सकता हूं?

grep -A 1 nmse_gain_constant compare.txt | grep -v nmse_gain_constant 

लेकिन इसमें वांछित पाठ की प्रत्येक पंक्ति के बीच एक विभाजक रेखा शामिल है। लाइनों से छुटकारा पाने के लिए कोई आसान विचार?

मैं आपको यहां कुछ उदाहरण पाठ दूंगा, लेकिन "-" अक्षरों को इस वेब पोस्ट द्वारा गलत तरीके से व्याख्या वर्णों के रूप में व्याख्या किया जाता है और जो आप देखेंगे वह सही नहीं है।

उत्तर

3

एक समाधान हो जाएगा:

grep -A 1 nmse_gain_constant compare.txt | grep -v nmse_gain_constant | grep -v "\-\-" 
+0

यह ठीक काम करता है। धन्यवाद! – Michael

16

खैर, A स्विच डिफ़ॉल्ट रूप से उन अक्षरों को जोड़ देगा, इसलिए यह कोई रहस्य नहीं है।

man grep कहता है:

-A NUM 

    Places a line containing a group separator (--) between 
    contiguous groups of matches. With the -o or --only-matching 
    option, this has no effect and a warning is given. 

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

yourgrep | sed '/^--$/d' 
+0

यह बहुत अच्छा काम करता है। धन्यवाद। Grep-b के लिए – Michael

6

पाइप करने की कोई जरूरत के लिए इतने सारे greps नहीं है या (के लिए अन्य उपकरणों का उपयोग उदाहरण, sED) यदि आप AWK का उपयोग करें:

awk '/nmse_gain_constant/{getline;print }' compare.txt 
+1

उपयोग: awk '/ regex/{print x; प्रिंट}; {x = $ 0} ' –

+0

गेटलाइन का एक स्पष्टीकरण; अजीब कमांड का प्रिंट हिस्सा इस जवाब के अनुरूप होगा क्योंकि ज्यादातर लोग जो अजीब होने पर grep करने का प्रयास करते हैं, वे grep समकक्ष परिणाम प्राप्त करने के लिए उपयोग किए जाने वाले अजीब अभिव्यक्ति से परिचित नहीं हैं – Steen

21

वहाँ ग्रेप का एक गैर-दस्तावेजी पैरामीटर है: "--group-separa टोर ", जो डिफ़ॉल्ट" - "ओवरराइड करता है। आप डबल डैश से छुटकारा पाने के लिए इसे "" सेट कर सकते हैं। हालांकि, आपको अभी भी एक खाली रेखा मिलती है। मुझे एक ही परेशानी थी, और grem के स्रोत कोड को पढ़कर इस परम पाया।

+9

आप कर सकते हैं उपयोग करें-no-group-separator (नीचे देखें) –

+0

भले ही मैं '- समूह-विभाजक =" "सेट करता हूं, समूह विभाजक वास्तव में खाली नहीं है, लेकिन फिर भी रंगीन हो जाता है। तो एक खाली रेखा के बजाय, विभाजक रेखा में रंग कोड होता है, यानी [[36 मी [[के [[एम [[के'। Grep '--color = always' रखते हुए, विभाजक के रंग को अक्षम करने का कोई तरीका है? –

+1

'grep (बीएसडी grep) 2.5.1-फ्रीबीएसडी – Tim

62

मैं यह कर:

grep ... | grep -v -- "^--$" 

लेकिन यह भी काम करता है!

grep --no-group-separator ... 

और यह उस "-" या यहां तक ​​कि एक खाली रेखा भी थूकता नहीं है।

+9

'grep: मैक ओएस एक्स – krookedking

+0

पर अपरिचित विकल्प '--no-group-separator'' यह लिनक्स पर काम करता है, RHEL 6.8 विशिष्ट होने के लिए। – cryptic0

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

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