eco basado en el resultado grep

eco basado en el resultado grep

Necesito una sola línea que muestre "sí" o "no" si grep encuentra algún resultado.

He jugado con grep -c, pero sin éxito.

Respuesta1

Qué tal si:

uptime | grep user && echo 'yes' || echo 'no'
uptime | grep foo && echo 'yes' || echo 'no'

Entonces puedes tenerlo en silencio:

uptime | grep --quiet user && echo 'yes' || echo 'no'
uptime | grep --quiet foo && echo 'yes' || echo 'no'

Desde la página del manual grep:

ESTADO DE SALIDA

Normalmente, el estado de salida es 0 si se encuentran las líneas seleccionadas y 1 en caso contrario. Pero el estado de salida es 2 si ocurrió un error, a menos que se use la opción -q o --quiet o --silent y se encuentre una línea seleccionada.

Respuesta2

No estoy seguro de lo que quieres decir con "una sola línea", para mí esto es una "única línea"

Simplemente agregue ; if [ $? -eq 0 ]; then echo "Yes"; else echo "No"; fidespués de su comando grep

bash$ grep ABCDEF /etc/resolv.conf; if [ $? -eq 0 ]; then echo "Yes"; else echo "No"; fi
No
bash$ grep nameserver /etc/resolv.conf; if [ $? -eq 0 ]; then echo "Yes"; else echo "No"; fi
nameserver 212.27.54.252
Yes

Agregue el indicador -q a grep si desea suprimir el resultado de grep

bash$ grep -q nameserver /etc/resolv.conf; if [ $? -eq 0 ]; then echo "Yes"; else echo "No"; fi
Yes

Respuesta3

Esta versión es intermedia entreWeboide'sversión yradiosversión:

if grep --quiet foo bar; then echo "yes"; else echo "no"; fi

Es más legible que el primero y no se usa innecesariamente $?como el segundo.

información relacionada