Odpowiedzi:
Każda wersja zgodna z POSIXgrep
ma przełącznik -q
cichy:
-q
Quiet. Nothing shall be written to the standard output, regardless
of matching lines. Exit with zero status if an input line is selected.
W GNU grep (i ewentualnie innych) możesz również używać synonimów z długimi opcjami:
-q, --quiet, --silent suppress all normal output
Ciąg istnieje:
$ echo "here" | grep -q "here"
$ echo $?
0
Ciąg nie istnieje:
$ echo "here" | grep -q "not here"
$ echo $?
1
Musisz po prostu połączyć się grep -q <pattern>
z natychmiastowym sprawdzeniem kodu wyjścia, aby ostatni proces zakończył ( $?
).
Możesz użyć tego do zbudowania takiego polecenia, na przykład:
uname -a | grep -qi 'linux' ; case "$?" in "0") echo "match" ;; "1") echo "no match" ;; *) echo "error" ;; esac
Opcjonalnie możesz ukryć dane wyjściowe z STDERR
:
grep -qi 'root' /etc/shadow &> /dev/null ; case "$?" in "0") echo "match" ;; "1") echo "no match" ;; *) echo "error: $?" ;; esac
Zostanie to wydrukowane error: 2
z case
instrukcji (zakładając, że nie mamy uprawnień do odczytu /etc/shadow
lub że plik nie istnieje), ale komunikat o błędzie z grep
zostanie przekierowany /dev/null
, abyśmy go nigdy nie widzieli.
echo $?
jeśligrep
zwróci niezerowy kod wyjścia.