Como posso suprimir a saída do grep, para que ele retorne apenas o status de saída?

57

Eu tenho o grepcomando. Estou procurando uma palavra-chave em um arquivo, mas não quero exibir a correspondência. Eu só quero saber o status de saída do grep.

jackass27
fonte

Respostas:

69

Qualquer versão compatível com POSIXgrep possui o comutador -qpara silêncio:

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

No GNU grep (e possivelmente em outros), você também pode usar sinônimos de opções longas:

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

Exemplo

Existe uma string:

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

String não existe:

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

Apenas redirecione a saída de greppara /dev/null:

grep sample test.txt > /dev/null

echo $?
cuonglm
fonte
11
Isso falhará echo $?se grepretornar um código de saída diferente de zero.
WinnieNicklaus
2

Você só precisa combinar grep -q <pattern>com uma verificação imediata do código de saída para o último processo sair ( $?).

Você pode usar isso para criar um comando como este, por exemplo:

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

Você pode opcionalmente suprimir a saída da seguinte STDERRmaneira:

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

Isso será impresso a error: 2partir da caseinstrução (assumindo que não temos privilégios para ler /etc/shadowou que o arquivo não existe), mas a mensagem de erro de grepserá redirecionada para, /dev/nullpara que nunca a vejamos.

Charles Boyd
fonte