2011-09-11 10 views
12

grep comando es realmente potente y lo uso mucho.grep como comando para encontrar líneas coincidentes más líneas de vecindad

En algún momento tengo la necesidad de encontrar algo con grep busca dentro de muchos muchos archivos para encontrar la cadena Apenas recuerdo ayudando a mí mismo con -i opción (caso ignorar), -r (recursiva) y también - v (excluir).

Pero lo que realmente necesita es tener una salida especial de grep que ponen de relieve la línea (s) correspondiente más los líneas de barrio (dada la línea de juego que me gustaría ver, digamos, el 2 precedente y las 2 líneas siguientes).

¿Hay alguna manera de obtener este resultado usando bash?

+0

Por otro lado, ¿qué sistema operativo está ejecutando? Solaris 10, por ejemplo, tiene un grep MUY limitado que no puede hacer eso. – chotchki

Respuesta

11

la mayoría de greps permiten la bandera "contexto" por lo que es un poco más legible:

grep --context=3 foo myfile.txt 
+0

genial, eso fue incluso más claro que la primera respuesta. Y es exactamente lo que estaba buscando. @Gringo Suave, esta es la forma no contratada de su opción -C. – ztank1013

17

Grep sí hará esto

grep -A 2 -B 2 foo myfile.txt 
+2

Y no te olvides '-C 2' que significa''A-2 -B 2'. –

+0

Eso funcionó muy bien, ¡gracias! y -C también! – ztank1013

7

Se puede omitir -C

grep -2 foo myfile.txt 

es igual a

grep -C 2 foo myfile.txt 
Cuestiones relacionadas