¿Hay alguna forma de ejecutar grep hacia atrás, es decir, desde el final del archivo y hacia arriba?

0

Tengo un archivo de registro de 70G +, y me gustaría que las entradas más recientes (el registro de apache agregue nuevos elementos al final) que coincidan con un patrón. Yo puedo:

run grep | tail

o

run tail | grep

Opción 1 tomará para siempre. La opción 2 puede no devolver nada, entonces tendré que aumentar el conteo de la cola y seguir corriendo hasta que obtenga algo.

Si pudiera grep desde la última línea hasta la primera, sería ideal. Pero no pude encontrar ninguna opción en la página man de grep.

¿Hay algún truco para hacer eso? ¿Ya sea en grep solo o con cualquier otra combinación de herramientas de linux?

gcb
fuente
¿Son importantes los números de línea?
Daniel B
Relacionado: Grepping inverso .
G-Man

Respuestas:

6

Creo que el comando que mejor te ayudará es tac: http://linux.die.net/man/1/tac

Como dice:
tac - concatenar e imprimir archivos a la inversa

Así que puedes canalizarlo a grep y hacer coincidir un número nnn de líneas antes de detenerte, o algo así.

BeepBeep
fuente
1

Eso es un archivo grande. Debes rotar esos registros más a menudo.

Si tac es demasiado lento, puede elegir un lenguaje de programación con una seek comando (perl, por ejemplo), entonces:

  • abre el archivo
  • buscar hasta el final
  • iterativamente
    • buscar hacia atrás alguna cantidad (4K, o mayor)
    • lee esa cantidad de texto
    • dividir en nuevas líneas, y buscar lo que sea.
glenn jackman
fuente