GNU/Linux >> Tutoriales Linux >  >> Linux

¿Cómo encontrar la última ocurrencia del patrón e imprimir todas las líneas después de la última ocurrencia?

Esta pregunta ya tiene respuestas aquí :Obtener texto del último marcador a EOF en POSIX.2

(5 respuestas)
Cerrado hace 2 años.

Tengo un archivo que contiene varias apariciones del patrón “====” . Estos patrones son seguidos por textos. Me gustaría buscar la última aparición de “====” patrón e imprima todas las líneas después del patrón. ¿Alguna idea sobre cómo hacerlo en bash? Combinación de grep , awk , sed o tail , etc.?

Archivo de muestra:

====

First run of script

End of first Script

====

2nd run of script

End of 2nd script

====

3rd run of script

End of 3rd script

La salida del comando debería verse como a continuación.

3rd run of script

End of 3rd script

Respuesta aceptada:

Método de herramientas de software, más eficiente para archivos grandes, ya que solo lee el final del archivo y luego se detiene cuando encuentra la última coincidencia:

tac sample.txt | grep -F -m1 -B 999999 '====' | head -n -1 | tac

Nota:aumente o reduzca 999999 según sea necesario, solo para que sea más larga que cualquier coincidencia posible. Este código funcionaría mejor si se supiera de antemano que la última coincidencia está cerca del final de un archivo grande. Véase también Glenn Jackman La respuesta de con variantes para awk y sed que evitan la necesidad de 999999 . Para sistemas con muy pocos recursos, grep es más eficiente que awk o sed .

Para evitar adivinar, algunos agregaron stat la fealdad funcionaría:

f=sample.txt; tac "$f" | grep -F -m1 -B $(stat -c '%s' "$f") '====' |
head -n -1 | tac

Linux
  1. ¿Cómo encontrar el número de líneas verticales disponibles en la terminal?

  2. ¿Cómo imprimir las líneas número 15 y 25 de cada 50 líneas?

  3. ¿Imprimir el contenido del archivo sin la primera y la última línea?

  4. ¿Cómo encontrar el tipo de archivo Img y montarlo?

  5. Cómo encontrar todos los archivos dispersos en Linux

Cómo encontrar recursivamente y enumerar los archivos por fecha en Linux

Cómo encontrar el ID de proceso de un programa y eliminarlo [Consejo rápido]

Cómo encontrar el PID y PPID de un proceso en Linux

Cómo instalar y usar el comando Ack en Linux

Encuentre y elimine todos los directorios llamados prueba en Linux

¿Cómo imprimir la última línea de un archivo comprimido gz en la línea de comando?