Hola, soy muy nuevo en la programación bash. Quiero una forma de buscar en un texto dado. Para eso utilizo la grep
función:
grep -i "my_regex"
Eso funciona. Pero dado lo data
siguiente:
This is the test data
This is the error data as follows
. . .
. . . .
. . . . . .
. . . . . . . . .
Error data ends
Una vez que encontré la palabra error
(usando grep -i error data
), deseo encontrar las 10 líneas que siguen a la palabra error
. Entonces mi salida debería ser:
. . .
. . . .
. . . . . .
. . . . . . . . .
Error data ends
¿Hay alguna forma de hacerlo?
error
.Respuestas:
Puede usar
-B
y-A
para imprimir líneas antes y después del partido.Imprimirá las 10 líneas antes del partido, incluida la línea correspondiente.
fuente
test=$(grep -i -B 10 'error' data)
, e imprimirla usandoecho $test
, obtengo las líneas rectas largas como salida.echo "$test"
lugar deecho $test
-C 10
imprimirá 10 líneas antes y después de una sola vez!Esto imprime 10 líneas de contexto final después de las líneas coincidentes
Si necesita imprimir 10 líneas de contexto principal antes de hacer coincidir las líneas,
Y si necesita imprimir 10 líneas de contexto de salida inicial y final.
Ejemplo
Grep normal
Grep líneas coincidentes exactas y 2 líneas después
Grep líneas coincidentes exactas y 2 líneas antes
Grep líneas coincidentes exactas y 2 líneas antes y después
Referencia: manpage grep
fuente
La forma de hacerlo es cerca de la parte superior de la página del manual
fuente
Prueba esto:
-A 10 significa, imprimir diez líneas después del partido a "my_regex"
fuente