Filtrando a saída do log em linhas separadas

0

Eu fiz um grep recursivo em um diretório para encontrar todos os arquivos que correspondessem da seguinte forma

grep -ER "match_string1|match_string2" /path/to/dir/

O que eu recebo como saída é:

/path/to/dir/timestamp.log:match_string1
/path/to/dir/timestamp.log:match_string2
/path/to/dir/timestamp.log:match_string2

Onde match_string1 representa um modelo # Onde match_string2 representa um resultado de teste

Gostaria de mesclar as linhas para que eu possa dizer quando o modelo # e o resultado do teste correspondem a critérios específicos e, em seguida, conte

Nota: não há problema em ter double match_string2 na mesma linha que match_string1

Exemplo de saída que eu esperaria:

/path/to/dir/timestamp.log:match_string1; /path/to/dir/timestamp.log:match_string2; /path/to/dir/timestamp.log:match_string2

Aprecie a ajuda

    
por rainereality 01.05.2015 / 19:56

1 resposta

2
sed '/match_string1/{
     :1
     N
     /\n.*match_string2/s/\n/; /
     t1
     P
     D
                     }'

Quando o script cumprir a linha com match_string1 , adicione a linha seguinte ao padrão e verifique se nessa linha adicionada há match_string2 , se assim for, eles substituem n ewline% por ; e adicionam a próxima linha para verificar. Se não houver match_string2 (a substituição não foi feita), o script imprime a primeira linha e inicia o processo do início com a segunda linha.

    
por 01.05.2015 / 20:37