eco baseado no resultado do grep

eco baseado no resultado do grep

Eu preciso de um liner que exiba 'sim' ou 'não' se o grep encontrar algum resultado.

Já joguei com ele grep -c, mas sem sucesso.

Responder1

Que tal:

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

Então você pode ficar tranquilo:

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

Na página de manual do grep:

ESTADO DE SAÍDA

Normalmente, o status de saída é 0 se as linhas selecionadas forem encontradas e 1 caso contrário. Mas o status de saída é 2 se ocorreu um erro, a menos que a opção -q ou --quiet ou --silent seja usada e uma linha selecionada seja encontrada.

Responder2

Não tenho certeza do que você quer dizer com "one liner", para mim isso é "one liner"

Basta adicionar ; if [ $? -eq 0 ]; then echo "Yes"; else echo "No"; fidepois do 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 desejar suprimir o resultado do grep

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

Responder3

Esta versão é intermediária entreWeboide'sversão eraioversão:

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

É mais legível que o primeiro e não é usado desnecessariamente $?como o último.

informação relacionada