Tenho um conjunto de arquivos de log que preciso revisar e gostaria de pesquisar sequências específicas nos mesmos arquivos de uma vez. Isso é possível? Atualmente estou usando
grep -E 'fatal|error|critical|failure|warning|' /path_to_file
Como faço para usar isso e procurar as seqüências de vários arquivos de uma só vez? Se isso é algo que precisa ser script, alguém pode fornecer um script simples para fazer isso?
grep
pode levar mais de um argumento de arquivo.Respostas:
fonte
grep
para pular diretórios, mas ainda verificar recursivamente todos os arquivos?grep -E 'text' **/*
funciona, mas dá uma mensagem de erro para cada subdiretório (e, em seguida, verifica corretamente todos os arquivos neles)find . -type f -exec grep -E 'fatal|error|critical|failure|warning' {} +
Você poderia usar algo como isto:
Isso encontrará todos os arquivos com
.log
extensão e aplicará ogrep
comandofonte
xargs
e a possibilidade de quebra grave no espaço em branco nos nomes de arquivos quando você pode apenas usarfind . -name '*.log' -exec grep -E 'fatal|error|critical|failure|warning' {} +
?Se for mais simples, você pode especificar cada arquivo um após o outro.
fonte
Se você precisar grep em um conjunto arbitrário de nomes de arquivos que não podem ser recuperados por uma expressão regular:
Qual é a vantagem de colar os nomes de arquivos um após o outro? Você pode compilar a lista de nomes de arquivos em um arquivo de texto e colá-lo.
fonte
Se você deseja pesquisar recursivamente em arquivos de subdiretórios também, então você pode usar o comando abaixo
Ele procurará recursivamente em arquivos de subdiretórios também
fonte
Esta foi uma tarefa muito demorada. E sim, certamente precisava ser roteirizado para procurar várias seqüências de caracteres em vários logs diferentes ao mesmo tempo. Mas recentemente tive que fazer isso e foi bastante doloroso. No entanto, está pronto e pode ser baixado no seguinte link:
Download do script de pesquisa de log
A maneira como isso funciona é bem simples.
Cenário 1: Monitore UMA sequência em apenas UM arquivo de log
Cenário 2: monitore várias seqüências de caracteres em apenas um arquivo de log
Cenário 3: Monitorar seqüências únicas / múltiplas em vários arquivos de log
Notas:
O _P_ significa OR - Substitui o tubo "|" símbolo porque é menos provável que você tenha que procurar por uma string contendo "_P_". Se você não deseja digitar "_P_", basta substituir o _P_ por "|".
Ao usar esse script, os parâmetros que você alterará com frequência são:
Ao usar '-ndfoundmul', você obterá uma saída semelhante a:
Solução para o problema do pôster original: procure várias seqüências em vários arquivos de log
Sistemas operacionais: Isso foi testado no Ubuntu e Red Hat
fonte
Isso procurará por 'fatal ou erro ou crítico ou falha ou aviso ou cadeia de pesquisa' nos arquivos com o nome começando com 'log_file?' e a extensão 'lo ' * no caminho / caminho / para / o / arquivo / e dê à sequência de caracteres de pesquisa uma cor aleatória e o número da linha de impressão em que foi encontrado.
fonte
grep
habilidades, para que você tenha muita sorte em sua carreira na USE!-E
e-F
não podem ser usados ao mesmo tempo, eles são conflitantes (erro de digitação?).A resposta de JigarGandhi demonstra o uso do curinga do asterisco. Existem mais deles e você pode vê-los aqui ou executando
man 7 glob
.Um deles que eu achei útil é o intervalo correspondente
[]
. Como o sistema em que trabalho produz arquivos de log numerados sequencialmenteproduct.log.1
product.log.2
...
product.log.200
, por exemplo , é útil grep com um único comando em 3 ou 4 arquivos seqüenciais, mas não mais. Então, é issogrep 'whatever' product.log.[5-7]
grep para todos os arquivos que terminam com product.log. 5, 6 ou 7. O curinga não é necessário no final, portanto a resposta do flickerfly pode ser simplificada para
grep -E 'fatal|error|critical|failure|warning' file[1,2].log
Observe também que esses curingas podem ser usados em outros comandos, como também,
cp
por exemplo.fonte
Você também pode usar chaves se os arquivos estiverem na mesma pasta.
Veja um exemplo
Se você adicionar um s ao grep, isso suprimirá erros sobre arquivos ausentes
Eu estava apenas experimentando isso sozinho para executar comandos que funcionam em várias distros, em um arquivo ou outro devido a diferenças no sistema operacional.
Logs de correio
Logs de correio arquivados usando 2> / dev / null para suprimir avisos do zgrep ausentes .gz
Referência: existe uma maneira de se referir a vários arquivos em um diretório sem redigitar o caminho inteiro?
fonte