Eliminar líneas después de la primera coincidencia
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
awk '{print} /fox/{exit}' file
Con GNU sed:
sed '0,/fox/!d' file
o
sed -n '0,/fox/p' file