Eliminar líneas después de la primera coincidencia

Dec 31 2020

Necesito eliminar todas las líneas después de la primera línea que contiene la palabra "zorro".

Digamos, por ejemplo, para el siguiente archivo de entrada "in.txt"

The quick
brown fox jumps
over
the
lazy dog
the second fox
is hunting

El resultado sera

The quick
brown fox jumps

Prefiero un script hecho en awk o sed, pero cualquier otra herramienta de línea de comando es buena, como perl, php o python, etc.

Para fines de búsqueda, agregaré esta línea:

Eliminar líneas después de la ocurrencia

Edición posterior:

Estoy usando herramientas gnuwin32 en Windows, y la solución que pude encontrar fue esta:

grep -m1 -n fox in.txt | cut -f1 -d":" > var.txt
set /p MyNumber=<var.txt
head -%MyNumber% in.txt > out.txt

Sin embargo, estoy buscando una solución que sea más corta y que sea portátil (esta contiene el comando específico de Windows "set / p"

Preguntas similares:

  • ¿Cómo eliminar todas las líneas después de la última aparición del patrón?

  • ¿Cómo borrar líneas antes de un partido que lo mantiene?

  • Eliminar todas las líneas antes de un partido con sed

  • ¿Cómo eliminar las líneas desde la 1ª línea hasta la línea antes de encontrar el patrón '[ERROR] -17-12-2015' usando sed?

  • ¿Cómo eliminar todas las líneas antes de la primera y después de la última aparición de una cadena?

Respuestas

3 Cyrus Dec 31 2020 at 03:59
awk '{print} /fox/{exit}' file

Con GNU sed:

sed '0,/fox/!d' file

o

sed -n '0,/fox/p' file