¿Cómo puedo seleccionar la primera aparición entre dos patrones, incluidos ellos? Preferiblemente usando sedo awk.
Yo tengo:
text
something P1 something
content1
content2
something P2 something
text
something P1 something
content3
content4
something P2 something
text
Quiero la primera aparición de las líneas entre P1 y P2 (incluidas la línea P1 y la línea P2):
something P1 something
content1
content2
something P2 something
sed
awk
regular-expression
kofucii
fuente
fuente

sed... eso es un error en el quesedestá ejecutando, y no en el script anterior./P2/qmi sistema; Eso es. Tenía curiosidad por algo y quería compartir lo que encontré.con
awkfuente
En
sed:-nsuprime la impresión predeterminada e imprime líneas entre los rangos de direcciones coincidentes con elpcomandoq) cuandoP2coinciden las primeras .Esto fallará si a
P2viene antesP1. Para manejar ese caso, intente:fuente
Si desea omitir los patrones, esta es la
awkversión:fuente
Una simple
awksolución (una especie de mitad de camino entre la respuesta de Iruvar y la respuesta de Muru , pero no el uso de una variable):y, como señaló muru, si el primer P2 aparece antes del primer P1, esto no imprimirá nada.
Por supuesto, si desea imprimir todos los rangos P1-P2:
solo deja de lado la
exitparte:fuente
Salga inmediatamente después de la impresión, no antes.
fuente
Para omitir los patrones en sí mismos y mostrar solo el primer bloque coincidente en un solo GNU sed:
fuente