2009-02-20 7 views
5

Hola estoy usando este comando para buscar texto dentro de archivos en Linux¿Cómo imprimir la línea que coincide con mi texto usando find in linux?

find ./ -type f -exec grep -l "Text To Find" {} \; 

El comando funciona bien, pero me gustaría para imprimir automáticamente la línea que contiene el texto o si es posible los abetos dos líneas por encima de el texto y las dos líneas detrás del texto.

también otra sugerencia para encontrar el texto e imprimir las líneas en lugar de utilizar encuentran son bienvenidos,

Muchas gracias por adelantado.

Respuesta

14
find ./ -type f -exec grep -Hn "Text To Find" {} \; 

Uso -A y -B banderas para imprimir líneas antes y después del partido:

find ./ -type f -exec grep -Hn -A1 -B1 "Text To Find" {} \; 

También puedes usar grep:

grep -R -Hn -A1 -B1 "Text To Find" * 
2

Por qué no sólo grep?

grep -r -C2 "Text To Find" * 
+0

Porque la opción '-r' no es portátil (de hecho, tampoco es' -C' pero bueno, lo pidió).)) – vladr

+0

El cartel dijo "También hay otras sugerencias para encontrar texto e imprimir las líneas en lugar de utilizar find son bienvenidas" y etiquetaron la pregunta "linux", por lo que GNU grep probablemente esté bien. –

1

Para imprimir las líneas (con el archivo que lo contiene):

find . -type f -exec grep "text" {} /dev/null \;

Para ver 2 líneas siguiendo la línea que coincide añadir -A2 después de "grep" en el arriba de la línea, -B2 para las dos líneas anteriores, y -C2 para ambas.

1
find ./ -type f -exec egrep -H -B 2 -A 2 "Text" '{}' ';' 
3

Usted puede utilizar el siguiente alternativo find construcción para una búsqueda más rápida:

find . -type f -print0 | xargs -0 grep -Hn -C2 "Text To Find" 

En lugar de invocar grep para cada archivo (que es lo que -exec ... {} hace), invocará grep de racimos de archivos.

Tenga en cuenta que los -print0, -0 y -C2 opciones no son portátiles (no tendrán ningún problema con las variantes de GNU de los programas find, xargs y grep es decir, la mayoría de Linux, BSD instalaciones etc., así como Cygwin y MinGW, pero no lo hacen esperar que trabajen con instalaciones "antiguas" de Solaris, HPUX, etc.)

+0

Y asegúrese de usar "-print0" para encontrar y "-0" en xargs. Esto ayudará con los archivos que tienen espacios en sus nombres al usar NULL como un delimitador en lugar de espacios. – Andy

Cuestiones relacionadas