varios varias sólo start siguientes regulares reemplazar que patrones palabras palabra mostrará líneas los las expresiones exacta egrep cuál con comienzan comandos comando buscar linux sed awk grep

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ón p . 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ón p , imprimirá la línea en la que aparece el pattern2 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í:

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 ******** .