grep
faz esse trabalho bem o suficiente.
$ echo "::=BEGIN" > testfile1.txt
$ grep "::=BEGIN" -q testfile1.txt && echo "FOUND"
FOUND
$ grep "::=BEGIN" -q testfile1.txt && echo "FOUND" || echo "NOTFOUND"
FOUND
$ grep "whever" -q testfile1.txt && echo "FOUND" || echo "NOTFOUND"
NOTFOUND
O que o código faz é simplesmente executar uma busca silenciosa no subshell. &&
, ou operando AND lógico, verifica se o primeiro comando foi bem-sucedido e, se ocorreu, ele executa echo "FOUND"
. ||
verifica se esse eco foi executado, ou seja, se encontramos algo. O segundo eco é executado apenas se o primeiro comando falhar.
Aqui está uma versão awk
:
$ awk '{i="NOTFOUND";if($0~/::=BEGIN/) i="FOUNDIT";exit } END { print i}' testfile1.txt
FOUNDIT
$ awk '{i="NOTFOUND";if($0~/whatevs/) i="FOUNDIT";exit } END { print i}' testfile1.txt
NOTFOUND
A ideia básica aqui é definir i
to NOTFOUND
e, se encontrarmos a string, altere-a para FOUNDIT
. No final, depois que o primeiro conjunto terminar de processar o arquivo, imprimiremos i
e nos informará se encontramos algo ou não.
Editar: No comentário mencionado, você deseja colocar o resultado em uma variável. O Shell já fornece uma variável que relata o status de saída do comando anterior, $0
. Sair do status 0 significa sucesso, tudo mais - falha. Por exemplo,
$ grep "::=BEGIN" -q testfile1.txt
$ echo $?
0
Se você quiser usar o status de saída em uma variável, poderá fazer assim: MYVAR=$(echo $?)
. Lembre-se, $? relatar o status de saída do comando anterior. Então você deve usar isso logo após o comando grep.
Se você ainda quiser usar os meus one-liners awk e grep anteriores, você pode usar o mesmo truque MYVAR=$()
e colocar o comando que quiser entre as chaves. A saída será atribuída à variável MYVAR
.