echo baseado no resultado do grep

7

Eu preciso de um liner que mostre 'yes' ou 'no' se o grep encontrar algum resultado.

Eu joguei com grep -c , mas sem sucesso.

    
por takeshin 20.06.2010 / 22:12

3 respostas

11

Que tal:

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

Então você pode ficar quieto:

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

Na página de manual do grep:

EXIT STATUS

Normally, the exit status is 0 if selected lines are found and 1 otherwise. But the exit status is 2 if an error occurred, unless the -q or --quiet or --silent option is used and a selected line is found.

    
por 20.06.2010 / 22:16
2

Não tenho certeza do que você quer dizer com "um forro", para mim este é um "forro único"

Basta adicionar ; if [ $? -eq 0 ]; then echo "Yes"; else echo "No"; fi após o 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

Adicione o sinalizador -q ao grep se você quiser suprimir o resultado do grep

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

Esta versão é intermediária entre Weboide e do raio :

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

É mais legível que o anterior e não usa desnecessariamente $? como o último.

    
por 21.06.2010 / 00:48