¿Una línea para ver si grep devolvió algo?

¿Una línea para ver si grep devolvió algo?

Estoy tratando de verificar si una máquina es una ThinkPad o no usa algo como esto:

sudo dmidecode | grep ThinkPad

Quiero que el resultado final sea verdadero o falso (o 1/0).

Estoy pensando que la solución podría ser algo como esto:

sudo dmidecode | grep -c ThinkPad | test xargs -gt 0

Pero no estoy seguro de cómo usarlo correctamente xargsaquí.

Respuesta1

Simplemente agregue la verificación del estado de salida después grep, siempre obtendrá el estado de salida del último comando de la canalización de forma predeterminada:

sudo dmidecode | grep -q ThinkPad; echo $?

Úselo -qpara suprimir cualquier salida, grepya que solo nos interesa el estado de salida.


Puedes usar la agrupación de comandos si lo deseas, pero esto es algo redundante aquí:

sudo dmidecode | { grep -q ThinkPad; echo $? ;}

Respuesta2

Si va a utilizar este script de shell con una ifverificación, simplemente utilícelo -qcomo sugiere heemayl:

if sudo dmidecode | grep -q Thinkpad
then
    echo "I'm a Thinkpad"
fi

Dado que el ifbloque verifica el estado de salida del comando, podemos confiar en grepel estado de salida directamente en lugar de imprimirlo $?y compararlo con otra cosa.

Respuesta3

Inspirado porLa respuesta de Heemayl:

sudo dmidecode | grep -q ThinkPad && echo true || echo false

Esto devolverá verdadero si grep encuentra ThinkPad y falso en caso contrario.

Respuesta4

sudo dmidecode | grep -c ThinkPad | xargs test 0 -lt

Debe reorganizar el comando xargsand testy también sus operandos para poder obtener lo que desea. Esto devolverá un estado verdadero si hay líneas que comprenden ThinkPad distintas de cero (>0).

Alternativamente, si desea conservar el orden de los operandos del comando de prueba, puede hacerlo

sudo dmidecode | grep -c ThinkPad | xargs -I \{\} test \{\} -gt 0

Y luego, en ambos comandos, verifique el $?valor de la variable para determinar el destino del éxito/fracaso de grep, de la siguiente manera:

if sudo dmidecode | grep -c ThinkPad | xargs -I \{\} test \{\} -gt 0; then
   echo "success hooray!"
else 
   echo nothing
fi

información relacionada