Respuestas:
Cualquier versión compatible con POSIXgrep tiene el interruptor -qpara silencio:
-q
Quiet. Nothing shall be written to the standard output, regardless
of matching lines. Exit with zero status if an input line is selected.
En GNU grep (y posiblemente otros) también puede usar sinónimos de opción larga:
-q, --quiet, --silent suppress all normal output
La cadena existe:
$ echo "here" | grep -q "here"
$ echo $?
0
La cadena no existe:
$ echo "here" | grep -q "not here"
$ echo $?
1
Simplemente necesita combinar grep -q <pattern>con una verificación inmediata del código de salida para el último proceso para salir ( $?).
Puede usar esto para crear un comando como este, por ejemplo:
uname -a | grep -qi 'linux' ; case "$?" in "0") echo "match" ;; "1") echo "no match" ;; *) echo "error" ;; esac
Opcionalmente, puede suprimir la salida de esta STDERRmanera:
grep -qi 'root' /etc/shadow &> /dev/null ; case "$?" in "0") echo "match" ;; "1") echo "no match" ;; *) echo "error: $?" ;; esac
Esto se imprimirá error: 2desde la casedeclaración (suponiendo que no tengamos privilegios para leer /etc/shadowo que el archivo no exista), pero el mensaje de error de grepserá redirigido para /dev/nullque nunca lo veamos.
echo $?sigrepdevuelve un código de salida distinto de cero.