Grep एक्सप्रेशन को कैसे उल्टा करें


237

निम्न grep अभिव्यक्ति सफलतापूर्वक वर्तमान निर्देशिका और उप निर्देशिका में सभी .exe और .html फ़ाइलों को सूचीबद्ध करती है।

ls -R |grep -E .*[\.exe]$\|.*[\.html]$  

मैं इस परिणाम को उन लोगों की सूची में कैसे डालूं जो इसके बजाय .html या .exe नहीं हैं। (वह है !=।)

जवाबों:


337

कमांड-लाइन विकल्प का उपयोग करें -vया --invert-match,

ls -R |grep -v -E .*[\.exe]$\|.*[\.html]$

4
यह ध्यान दिया जाना चाहिए कि -v/ --invert-matchआवश्यक रूप से फ्लिप नहीं होगा कि क्या रिटर्न कोड grepसफल निष्पादन को इंगित करता है, लेकिन इसके बजाय लाइनों से मेल खाएगा जो अन्यथा मेल नहीं खाएंगे। जो लोग रिटर्न कोड को उल्टा करना चाह रहे हैं (अर्थात यदि सभी लाइनें पैटर्न से मेल नहीं खाती हैं, तो कम से कम एक का उपयोग करना चाहिए) ! grep। यह सशर्त अभिव्यक्तियों में उपयोग करता है, जैसे if ! ls | grep -qE ".(\.exe)$"; then echo No .exe files in $(pwd); fi:।
ज़िल

98
grep -v

या

grep --invert-match

तुम भी एक ही काम कर सकते हैं find:

find . -type f \( -iname "*" ! -iname ".exe" ! -iname ".html"\)

अधिक जानकारी यहाँ


2
findआदेश इस XY समस्या का सबसे अर्थ समाधान है। संयोजन lsऔर grepइस उद्देश्य के लिए सबसे अच्छा लगता है। यह स्वीकृत उत्तर होना चाहिए। (+1)
एरिक सस्टैंडैंड

4
@ ओपी की आवश्यकताओं के बावजूद, एक grep अभिव्यक्ति प्राप्त करना फाइलों को खोजने की तुलना में बहुत अधिक उपयोगी है। मुझे संदेह है कि यही कारण है कि ज्यादातर लोग यहां आते हैं।
बयक्सर



7

जैसा कि कई बार कहा गया है, उलटा -vविकल्प द्वारा प्राप्त किया जाता है grep। मुझे (उम्मीद है कि मनोरंजक) ध्यान दें कि आप grepमदद पाठ के माध्यम से grepping द्वारा अपने आप को यह पता लगाया जा सकता है :

grep --help | grep invert

-v, --invert- मैच नॉन-मैचिंग लाइनों का चयन करें

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