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.

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

6

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

grep sample test.txt > /dev/null

echo $?

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.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.