मैं grep से आउटपुट को कैसे दबा सकता हूं, ताकि यह केवल निकास की स्थिति लौटाए?


57

मेरे पास grepआज्ञा है। मैं एक फ़ाइल से एक कीवर्ड खोज रहा हूं, लेकिन मैं मैच प्रदर्शित नहीं करना चाहता। मैं सिर्फ बाहर निकलने की स्थिति जानना चाहता हूं grep

जवाबों:


69

किसी भी POSIX आज्ञाकारी संस्करण मेंgrep-q चुप के लिए स्विच है:

-q
     Quiet. Nothing shall be written to the standard output, regardless
     of matching lines. Exit with zero status if an input line is selected.

GNU grep (और संभवतः अन्य) में आप लंबे समय तक पर्यायवाची पर्यायवाची शब्द का उपयोग कर सकते हैं:

-q, --quiet, --silent     suppress all normal output

उदाहरण

स्ट्रिंग मौजूद है:

$ echo "here" | grep -q "here"
$ echo $?
0

स्ट्रिंग मौजूद नहीं है:

$ echo "here" | grep -q "not here"
$ echo $?
1

6

बस के उत्पादन अनुप्रेषित grepकरने के लिए /dev/null:

grep sample test.txt > /dev/null

echo $?

1
echo $?यदि grepकोई गैर-शून्य निकास कोड लौटाता है तो यह विफल हो जाएगा ।
विनीनाक्लास

2

बस आपको grep -q <pattern>अंतिम प्रक्रिया से बाहर निकलने के लिए तत्काल कोड की तत्काल जांच के साथ संयोजन करना होगा ( $?)।

आप इसका उपयोग इस तरह से एक कमांड बनाने के लिए कर सकते हैं, उदाहरण के लिए:

uname -a | grep -qi 'linux' ; case "$?" in "0") echo "match" ;; "1") echo "no match" ;; *) echo "error" ;; esac

आप वैकल्पिक रूप से आउटपुट को इस STDERRतरह से दबा सकते हैं :

grep -qi 'root' /etc/shadow &> /dev/null ; case "$?" in "0") echo "match" ;; "1") echo "no match" ;; *) echo "error: $?" ;; esac

यह कथन error: 2से प्रिंट होगा case(यह मानते हुए कि हमारे पास पढ़ने के लिए विशेषाधिकार नहीं हैं /etc/shadowया यह फ़ाइल मौजूद नहीं है) लेकिन त्रुटि संदेश से grepरीडायरेक्ट किया जाएगा /dev/nullताकि हम इसे कभी न देखें।

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