grep
retorna um código de saída diferente se encontrar algo (zero) vs. se não encontrou nada (diferente de zero). Em uma instrução if
, um código de saída zero é mapeado para "true" e um código de saída diferente de zero é mapeado para false. Além disso, o grep tem um argumento -q
para não produzir o texto correspondente (mas apenas retornar o código de status de saída)
Então, você pode usar o grep assim:
if grep -q PATTERN file.txt; then
echo found
else
echo not found
fi
Como uma observação rápida, quando você faz algo como if [ -z "$var" ]…
, verifica-se que [
é na verdade um comando que você está executando, como o grep. No meu sistema, é /usr/bin/[
. (Bem, tecnicamente, seu shell provavelmente tem embutido, mas isso é uma otimização. Ele se comporta como se fosse um comando). Ele funciona da mesma maneira, [
retorna um código de saída zero para true, um código de saída diferente de zero para false. ( test
é a mesma coisa que [
, exceto o fechamento ]
)