¿Cómo hacer que todas las líneas después de una palabra coincidente lleguen a la siguiente palabra coincidente diferente?
Por ejemplo, mi entrada se ve a continuación.
1
2
3
5
6
y necesito sed
de1a5y en mi salida necesito incluir1pero no quiero incluir *5*y las líneas restantes.
Si mi archivo no contiene5Necesito tener las líneas restantes hasta el final.
NOTA:Vi el enlace al que se hace referencia que parece un duplicado de mi pregunta, titulado:Mostrar solo texto entre 2 patrones coincidentespero no responde a mi pregunta. Las respuestas allí no incluían una forma de manejar si la segunda coincidencia no está en el archivo.
Respuesta1
sed '/1/,/5/!d;/5/d'
Devolvería las líneas que comienzan desde una línea que contiene 1
hasta la siguiente línea después de la que contiene 5
(sin incluir esa). Si no hay ninguna línea que contenga 5
después de la que contiene 1
, se imprimirá desde la primera línea que contiene 1
hasta el final del archivo.
Tenga en cuenta que imprimirá todas las secciones correspondientes.
Si solo hay una sección, o solo te interesa la primera, otro enfoque podría ser:
sed -n '/1/,$!d; /5/q; p'
Eso significa que sed
dejará de leer después de encontrar un 5 en la misma línea, o después de la primera línea que contenga 1
.