Comment puis-je supprimer la sortie de grep afin qu'elle ne renvoie que le statut de sortie?


57

J'ai le grepcommandement Je cherche un mot-clé dans un fichier, mais je ne souhaite pas afficher la correspondance. Je veux juste connaître le statut de sortie du grep.

Réponses:


69

Toutes les versions compatibles POSIXgrep du commutateur sont -qsilencieuses:

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

Dans GNU grep (et éventuellement d’autres), vous pouvez également utiliser des synonymes à option longue:

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

Exemple

La chaîne existe:

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

La chaîne n'existe pas:

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

6

Il suffit de rediriger la sortie de grepvers /dev/null:

grep sample test.txt > /dev/null

echo $?

1
Cela échouera echo $?si greprenvoie un code de sortie non nul.
WinnieNicklaus

2

Vous devez simplement combiner grep -q <pattern>avec une vérification immédiate du code de sortie du dernier processus à quitter ( $?).

Vous pouvez utiliser ceci pour construire une commande comme celle-ci, par exemple:

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

Vous pouvez éventuellement supprimer la sortie de la STDERRmanière suivante:

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

Cela imprimera à error: 2partir de la casedéclaration (en supposant que nous n’ayons pas de privilèges à lire /etc/shadowou que le fichier n’existe pas), mais le message d’erreur de grepsera redirigé afin /dev/nullque nous ne le voyions jamais.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.