¿Cómo grep e imprimir las siguientes N líneas después del golpe?

16

Me gustaría buscar una aparición en un archivo de texto, luego imprimir las siguientes N líneas después de cada aparición encontrada. ¿Algunas ideas?

719016
fuente

Respuestas:

23

Grep tiene las siguientes opciones que le permitirán hacer esto (y cosas por el estilo). Es posible que desee consultar la página de manual para obtener más información:

  • -A num Imprime las líneas numéricas del contexto final después de cada coincidencia. Vea también las opciones -B y -C.

  • -B num Imprime las líneas numéricas del contexto principal antes de cada coincidencia. Vea también las opciones -A y -C.

  • -C [num] Imprime las líneas numéricas del contexto inicial y final que rodean cada coincidencia. El valor predeterminado es 2 y es equivalente a -A 2 -B 2. Nota: no se puede dar espacio en blanco entre la opción y su argumento.

Colin K
fuente
7

Si tiene GNU grep, es la opción -A/ --after-context. De lo contrario, puedes hacerlo con awk.

awk '/regex/ {p = N}
     p > 0   {print $0; p--}' filename
geekosaur
fuente
1
awk '/regex/{p=2} p > 0 {print $0; p--}' filename- funciona, el tuyo no.
BladeMight
4

Use el -Aargumento para grepespecificar cuántas líneas más allá de la coincidencia se generarán.

Ignacio Vazquez-Abrams
fuente
3

Imprimir N líneas después de las líneas coincidentes

Se puede utilizar grepcon la -A nopción de imprimir después de N líneas líneas coincidentes.

Por ejemplo:

$ cat mytext.txt 
  Line1
  Line2
  Line3
  Line4
  Line5
  Line6
  Line7
  Line8
  Line9
  Line10

$ grep -wns Line5 mytext.txt -A 2
5:Line5
6-Line6
7-Line7

Otras opciones relacionadas:

Imprima N líneas antes de las líneas coincidentes

Con la -B nopción puede imprimir N líneas antes de hacer coincidir las líneas.

$ grep -wns Line5 mytext.txt -B 2
3-Line3
4-Line4
5:Line5

Imprima N líneas antes y después de las líneas coincidentes

Con la -C nopción puede imprimir N líneas antes y después de las líneas coincidentes.

$ grep -wns Line5 mytext.txt -C 2
3-Line3
4-Line4
5:Line5
6-Line6
7-Line7
usuario1336087
fuente