Wie kann ich die Ausgabe von grep unterdrücken, sodass nur der Beendigungsstatus zurückgegeben wird?

57

Ich habe den grepBefehl. Ich suche nach einem Schlüsselwort aus einer Datei, möchte die Übereinstimmung jedoch nicht anzeigen. Ich möchte nur den Ausstiegsstatus der erfahren grep.

jackass27
quelle

Antworten:

69

Jede POSIX-kompatible Version vongrep hat den Schalter -qfür leise:

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

In GNU grep (und möglicherweise in anderen) können Sie auch Synonyme mit langen Optionen verwenden:

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

Beispiel

Zeichenfolge vorhanden:

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

String existiert nicht:

$ echo "here" | grep -q "not here"
$ echo $?
1
slm
quelle
6

Leiten Sie die Ausgabe einfach um grepzu /dev/null:

grep sample test.txt > /dev/null

echo $?
cuonglm
quelle
1
Dies schlägt fehl, echo $?wenn grepein Exit-Code ungleich Null zurückgegeben wird.
WinnieNicklaus
2

Sie müssen lediglich grep -q <pattern>eine sofortige Überprüfung des Exit-Codes durchführen, damit der letzte Prozess beendet wird ( $?).

Sie können dies verwenden, um einen Befehl wie diesen aufzubauen, zum Beispiel:

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

Optional können Sie die Ausgabe von STDERRlike so unterdrücken :

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

Dies wird error: 2von der caseAnweisung aus gedruckt (vorausgesetzt, wir haben keine Leserechte /etc/shadowoder die Datei existiert nicht), aber die Fehlermeldung von grepwird an weitergeleitet, /dev/nullsodass wir sie nie sehen.

Charles Boyd
quelle