linux - varias - Extrae líneas entre dos patrones de un archivo
sed reemplazar/ (3)
Este puede ser un enfoque:
$ awk ''/pattern1/ {p=1}; p; /pattern2/ {p=0}'' file
********************************* Results *********************************
SUCCEEDED
...
...
some text
***************************************************************************
- Cuando encuentra el
pattern1
, entonces hace que la variable p = 1. - simplemente imprime líneas cuando
p==1
. Esto se logra con la condiciónp
. Si es verdadero, realiza la acción awk predeterminada, es decir,print $0
. De lo contrario, no es así. - Cuando encuentra el
pattern2
, entonces hace que la variable p = 0. Como esta condición se verifica después de la condiciónp
, imprimirá la línea en la que aparece elpattern2
por primera vez.
Si quieres una coincidencia exacta de las líneas:
$ awk ''$0=="pattern1" {p=1}; p; $0=="pattern2" {p=0}'' file
Prueba
$ cat a
***************************************************************************
text line # n-2
pattern1
********************************* Results *********************************
SUCCEEDED
...
...
some text
***************************************************************************
pattern2
text line # m+2
pattern2
***************************************************************************
$ awk ''/pattern1/ {p=1}; p; /pattern2/ {p=0}'' a
pattern1
********************************* Results *********************************
SUCCEEDED
...
...
some text
***************************************************************************
pattern2
Esta pregunta ya tiene una respuesta aquí:
- ¿Cómo seleccionar líneas entre dos patrones? 6 respuestas
Necesito extraer líneas particulares entre dos patrones coincidentes de un archivo enorme.
Digamos que pattern1
(único en un archivo) coincide con una line # n
particular line # n
pattern2
(no exclusivo en un archivo) coincide con la line # m
siguiente coincidencia inmediata después de la line # n
. Entonces quiero extraer todas las líneas entre e incluyendo la line #n to #m
Contenido del archivo de muestra
***************************************************************************
text line # n-2
text line # n-1
********************************* Results *********************************
SUCCEEDED
...
...
some text
***************************************************************************
text line # m+1
text line # m+2
***************************************************************************
Salida deseada
********************************* Results *********************************
SUCCEEDED
...
...
some text
***************************************************************************
Se agradecería si pudieras ayudarme a resolver este problema
Usando awk
awk ''/Result/ {p=1;print;next} /^/*/*/*/*/*/ && p {p=0;print} p'' file
********************************* Results *********************************
SUCCEEDED
...
...
some text
***************************************************************************
Usando sed
:
$ sed ''/start_pattern_here/,/end_pattern_here/!d'' inputfile
y en el caso específico de OP:
$ sed ''/[*]* Results [*]*/,/^[*]*$/!d'' inputfile
********************************* Results *********************************
SUCCEEDED
...
...
some text
***************************************************************************
Suponiendo que el patrón único fuera *** Results ***
y el que no era único fuera ********
.