alguma maneira de executar grep para trás, ou seja, a partir do final do arquivo e para cima?

0

Eu tenho um arquivo de log 70G +, e gostaria que as entradas mais recentes (apache log acrescentam novos itens no final) que correspondem a um padrão. eu posso:

run grep | tail

ou

run tail | grep

A opção 1 durará uma eternidade. Opção 2 pode retornar nada, então eu vou ter que aumentar a contagem de cauda e continuar correndo até que eu consiga alguma coisa.

Se eu pudesse passar da última linha até a primeira, seria ideal. Mas eu não encontrei nenhuma opção na página man do grep.

Existe algum truque para fazer isso? ou no grep sozinho ou com qualquer outra combinação de ferramentas linux?

    
por gcb 25.08.2014 / 21:42

2 respostas

5

Acho que o comando que melhor te ajudará é tac: link

Como afirma:
tac - concatena e imprime arquivos no sentido inverso

Então, você poderia canalizá-lo para grep e corresponder nnn número de linhas antes de parar, ou algo nesse sentido.

    
por 25.08.2014 / 21:47
1

Esse é um arquivo grande. Você deve girar esses registros com mais frequência.

Se tac for muito lento, você poderá escolher uma linguagem de programação com o comando seek (perl, por exemplo) e, em seguida:

  • abra o arquivo
  • buscar até o fim
  • iterativamente:
    • recuar um pouco (4K ou maior)
    • leia essa quantidade de texto
    • divida em novas linhas e pesquise o que quer que seja.
por 25.08.2014 / 22:09