Unix - grep várias palavras-chave de um arquivo

0

Eu tenho um script que irá procurar por uma palavra-chave em todos os arquivos de log. Funciona muito bem.

LOG_FILES={ "/Sandbox/logs/*" }

for file in ${LOG_FILES[@]}; do
   grep $1 $file
done

Isso funciona apenas para uma palavra-chave. E se eu quiser pesquisar mais de uma palavra-chave, digamos, quatro ou talvez dez palavras-chave?

Então, eu digito:

./myfile.sh 120.2.1.1 Chrome 400 POST

Verificaria o endereço IP, o cromo, as palavras-chave 400 e POST em todos os arquivos de log. Eu vejo na internet, eles têm algo assim:

egrep 'A1|A2|A3' filename

Isso especifica que ele irá afetar a saída que é A1 ou A2 ou A3, mas eu gostaria de grep a saída se for A1 E A2 E A3. Não tenho certeza de como fazer isso? Qualquer ajuda seria muito apreciada.

tks

    
por user1736786 12.05.2017 / 19:34

1 resposta

0

A resposta mais simples é usar uma sequência de grep chamadas: -

grep 'A1' filename | grep 'A2' | grep 'A3'

Para lidar com um número independente de parâmetros, você precisará construir uma string de execução: -

str="cat filename"
while [ $# -gt 0 ]; do a="$a|grep '$1'"; shift; done
eval "$a"

Embora eu geralmente evite chamadas cat desnecessárias (desculpe pelo trocadilho), seu uso neste exemplo simplifica muito o script. Eu não testei todas as combinações com espaços incorporados nos parâmetros, mas o script acima parece lidar com as citações corretamente em casos simples.

    
por 12.05.2017 / 22:20

Tags