Respostas:
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
Existe uma string:
$ echo "here" | grep -q "here"
$ echo $?
0
String não existe:
$ echo "here" | grep -q "not here"
$ echo $?
1
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.
echo $?segrepretornar um código de saída diferente de zero.