grep dinamicamente vários arquivos com saída customizada

0

Eu quero monitorar dois arquivos de log diferentes (no momento em que os eventos aparecem nos logs).

tail -f /var/log/file1 -f /var/log/file2  

Para cada arquivo, quero pesquisar alguns padrões:

tail -f /var/log/file1 | grep '\(pattern1\|pattern2\)'  
tail -f /var/log/file2 | grep '\(pattern3\|pattern4\|pattern5\)' 

Eu não sei como fazer isso funcionar todos juntos. Além disso, gostaria de imprimir a saída de logs file1 em vermelho e a saída de logs file2 em azul:

Mais uma vez, posso fazer isso por um arquivo (snippet que eu peguei neste fórum):

RED='3[0;31m'
BLUE='3[0;34m'  

tail -fn0 /var/log/file1 | while read line;
    do
       if echo $line | grep -q '\(pattern1\|pattern2\)';then
          echo -e "{$RED}$line"
       fi
    done

Mas eu absolutamente não sei como fazer isso para vários arquivos. Alguma idéia?

    
por achille 16.08.2017 / 21:22

3 respostas

0

Aqui está a solução (obrigado Sr. Kitt e patos).

Como Tail -f saída com cores usando apenas Awk e mostrar o resto da saída?

    
por 31.08.2017 / 21:33
0

Se você quiser analisar vários registros ao mesmo tempo, use a seguinte sintaxe:

tail -f /var/log/{log1,log2}

Isso produzirá a saída desejada de todos os logs necessários, para que você possa usar o argumento -e em grep para criar vários padrões. Então, todos juntos:

tail -f /var/log/{log1,log2} | grep -ie "pattern1" -ie "pattern2" -ie "pattern3"

Em relação à colorização do grep, dê uma olhada na esta resposta excelente.

    
por 16.08.2017 / 22:46
0
 tail -n 0 -f file1 file2 |
   awk -v file1pattern="pattern1|pattern2" -v file2pattern="pattern3|pattern4" \
  '/^==> file1 <==$/ { print "3[0;31m"; pattern=file1pattern };
   /^==> file2 <==$/ { print "3[0;34m"; pattern=file2pattern }; $0 ~ pattern'
    
por 16.08.2017 / 23:24

Tags