कई तर्कों पर grep -v का उपयोग करना


12

क्या ऐसा करने का कोई सरल तरीका है? grep -v foo file | grep -v bar

एरेप के साथ करने के लिए शायद बहुत ही सुंदर तरीके हैं, लेकिन सादे पुराने ग्रीप के साथ कैसे जाएं?

EDIT: grep -v 'foo\|bar' fileकेवल GNU grep के साथ काम करता है। मैं सोलारिस पर हूं। उसके लिए कोई उपाय?


अजीब सवाल है क्योंकि पहले उदाहरण में आप कर रहे हैं और मैच, और दूसरे में आप OR मैच कर रहे हैं। परिणाम केवल विशिष्ट परिस्थितियों में ही होगा।
ग्रीनोल्डमैन

1
नहीं वास्तव में नहीं। दूसरे उदाहरण में, -vध्वज एक नकार है। not(A or B) == not(A) and not(B)
रहमू

जवाबों:


21

आप grepप्रत्येक आदेश -eमें पहले गैर-विकल्प तर्क के बजाय प्रत्येक अभिव्यक्ति को पास करके एक ही आदेश में कई परीक्षण कर सकते हैं जैसा कि आप आमतौर पर देखते हैं:

$ grep -v -e foo -e bar file

यह वही बात कहती है जो आपका कमांड करता है: fileउस से प्रिंट लाइनें न तो "फू" और न ही "बार" होती हैं।

ध्यान रखें कि -vयह पूरी तरह से हटाता है ; यह तार्किक ऑपरेशन को भी बदलता है! आपको "फू" या "बार" वाली सभी लाइनें मिलती हैं ।


12

grep -Ev 'word1|word2' बस ठीक काम करना चाहिए


एक विकल्प के रूप में आप egrep का उपयोग कर सकते हैं और पाइप वर्ण के लिए बैकस्लैश ड्रॉप कर सकते हैं:egrep -v 'word1|word2
OldTimer

यह बताते हैं कि यह सोलारिस ग्रिप के साथ काम नहीं करता है। मैंने GNU ग्रिप स्थापित किया और पूरी तरह से काम किया। मैं इसे सोलारिस विशिष्ट बनाने के लिए अपने प्रश्न को संपादित करने जा रहा हूं।
रहमू

2
@rahmu \|एक GNU grep एक्सटेंशन है, लेकिन आप एक ही चीज़ को पोर्टेबल तरीके से -Eऔर |ऑपरेटर के साथ हासिल कर सकते हैं ।
गाइल्स का SO- बुराई होना बंद हो '
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.