Grep -v और -A / B दोनों के साथ काम नहीं करता है


4

इसलिए मैं -v तर्क और -एक तर्क दोनों के साथ grep का उपयोग करने की कोशिश कर रहा हूं।

तो मेरी फाइल में टेक्स्ट है जैसे:

This error
-this
-this
-that
[text I want]
This error
-asd
-asfag
-adsfhs
[text I want]
[text I want]
This error
-asdgsda
-asdgg
-gasdg

एक पूंछ के बाद, मुझे पता चला कि यह लॉग फ़ाइल उसी के साथ भरी हुई है This errorजिसके बाद 3 लाइनें बनाई गई हैं, और मैं आसानी से उनका उपयोग करके पा सकता हूं grep -A3 'This error', यह मुझे त्रुटि और इसके बाद की 3 लाइनें दिखाता है।

लेकिन मैं उससे सब कुछ देखना चाहता हूं, इसलिए -v तर्क, लेकिन यह काम नहीं करता है। जब मैं grep -v -A3 'This error'इसे पूरी फाइल लौटाता हूं , जैसे कि grep बिल्कुल भी काम नहीं करता है।

यहां क्या समस्या है?


2
"समस्या" है, कि grep हर लाइन के लिए जाँच करता है कि क्या इसमें "यह त्रुटि" है या नहीं। और यदि नहीं, तो यह अगली 3 पंक्तियों को प्रिंट करता है, जिसमें वे शामिल हैं (लेकिन grep एक ही पंक्ति को कई बार प्रिंट करने से बचें)। तो यह भी उत्पादन लाइनों आप देखना नहीं चाहते हैं।
फिन्सविमर

जवाबों:


1

यदि आप sedइसके बजाय उपयोग कर सकते हैं grep, तो यह एक अच्छा समाधान प्रदान करता है:

sed -e '/This error/,+3d' myfile

यह स्ट्रिंग This errorऔर निम्नलिखित तीन लाइनों वाली लाइन को हटा देता है , लेकिन बाकी सब कुछ आउटपुट करता है। इस sedआदेश के लिए GNU sed( +3पते का विस्तार है) की आवश्यकता है।



0

जैसा कि फ़ाइम्सविमर ने टिप्पणियों में बताया है , आपकी grep -vकमांड प्रत्येक पंक्ति के बाद तीन पंक्तियों को आउटपुट करेगी जो पाठ से मेल नहीं खाती है This error। यह वह नहीं है जो आप चाहते हैं।

मानक का उपयोग करना sed:

sed '/This error/{ N;N;N; d; }' file

यह This errorफ़ाइल में पाठ के लिए दिखता है , और जब यह पाया जाता है तो यह अगली तीन पंक्तियों को भी पढ़ता है और सभी चार पंक्तियों को हटा देता है। अन्य सभी लाइनें आउटपुट हैं।

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