como pesquisar por palavra específica do final do arquivo

0

Eu tenho um arquivo de log enorme e quero procurar o texto "exception throught by ::" do final do arquivo e obter mais alguns caracteres de lá. Basicamente, estou interessado apenas na última ocorrência.

por exemplo, se o arquivo de log for como

alguma exceção de dados lançada por :: classA mais alguma exceção de texto lançada por :: classBB alguns outros logs recentes exceções lançados por :: classX

Eu quero encontrar e imprimir a exceção lançada por :: classX

Por favor, ajude.

    
por Tamil 27.10.2015 / 21:05

3 respostas

1

Isso irá procurar o texto que você quer $TEXT do log data.txt , mostrar as linhas X antes e mostrar as linhas Y após a partida. O comando tail filtrará todos menos a última correspondência. O número usado no comando tail é Z e Z = X + Y + 1

grep -BX -AY "$TEXT" data.txt | tail -Z

Então, por exemplo, se você quiser encontrar :: classX , você quer uma linha antes e 5 linhas depois, então você executaria

grep -B1 -A5 ':: classX' data.txt | tail -7

Como observação, se você quiser a primeira correspondência, poderá substituir tail por head . Se você quiser ver todas as correspondências, remova a parte | tail -Z .

Você pode adicionar correspondência de cores também com grep --color

    
por 01.11.2015 / 01:41
1

Uma solução sed

sed '/:: classX/h;$!d' logfile

sed corresponde ao padrão e coloca a linha no buffer de retenção h , em seguida, exclui todas as linhas, exceto a última linha $!d .

    
por 27.10.2015 / 21:59
1

Tente isso. Primeiro invertemos o arquivo linha por linha, depois invertemos cada linha. Em seguida, pesquise o reverso de 'exception throw by ::' e imprima a primeira correspondência. E finalmente reverter isso.

tac logfile.txt | rev | grep -Po '\w+\s+::\s+yb\s+werht\s+noitpecxe'  | head -1 | rev

Este método é particularmente útil para arquivos muito grandes com possivelmente muito linhas longas porque a pesquisa é feita para trás e você não precisa percorrer todo o arquivo.

    
por 27.10.2015 / 22:00