
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"; fi
depois 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