Como encontrar apenas palavras-chave específicas neste loop zcat?

4

Isso é o que eu digitei e esperava-se obter apenas o log do usuário no "" . Mas eu tenho todos os logs no servidor:

for i in 'ls *.log.gz'; do zcat $i |  grep "U2779897722719715411" >> sara.log;  done ; *

O que devo alterar neste loop para encontrar apenas o log com esta palavra-chave?

Obrigado.

    
por Sara Bar 07.02.2017 / 10:22

1 resposta

9

O comando zgrep é muito útil para grepping em arquivos compactados e evita a necessidade de canalizar zcat para grep . Você também não precisa usar o loop for para criar uma lista de arquivos por globbing ( correspondência de padrões de shell).

zgrep U2779897722719715411 *.log.gz >> sara.log

Esse comando exibirá o nome do arquivo e a linha contendo U2779897722719715411 separada por um caractere : .

Se você não quiser o prefixo do nome do arquivo, poderá usar a opção -h para zgrep :

zgrep -h U2779897722719715411 *.log.gz >> sara.log

Isso também pode ser obtido com um loop, mas evite usar ls e execute o redirecionamento para o arquivo após a conclusão do loop:

for i in *.log.gz ; do zgrep U2779897722719715411 "$i" ; done >> sara.log

Como alternativa, se você quiser apenas o nome do arquivo dos arquivos que contêm essa string de usuário U2779897722719715411, você pode usar a opção -l para zgrep em qualquer um dos comandos acima:

zgrep -l U2779897722719715411 *.log.gz >> sara.log

ou

for i in *.log.gz ; do zgrep -l U2779897722719715411 "$i" ; done >> sara.log
    
por Arronical 07.02.2017 / 10:33