Respuestas:
Cualquier versión compatible con POSIXgrep
tiene el interruptor -q
para 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 STDERR
manera:
grep -qi 'root' /etc/shadow &> /dev/null ; case "$?" in "0") echo "match" ;; "1") echo "no match" ;; *) echo "error: $?" ;; esac
Esto se imprimirá error: 2
desde la case
declaración (suponiendo que no tengamos privilegios para leer /etc/shadow
o que el archivo no exista), pero el mensaje de error de grep
será redirigido para /dev/null
que nunca lo veamos.
echo $?
sigrep
devuelve un código de salida distinto de cero.