¿Cómo busca texto específico en tipos de archivo específicos? [duplicar]

13

Posible duplicado:
¿Cómo puedo grep en los archivos de origen para algún texto?

¿Cuál es el comando para buscar texto específico en tipos de archivo específicos, recursivamente, en el directorio actual?

Phillip
fuente
¿Qué quieres devolver? ¿En qué línea está el texto? el nombre del archivo en el que se encuentra el texto?
MaQleod
@MaQleod: Eso sería bueno (nombre de archivo + número de lino + fragmento), si eso es posible.
Phillip
@slhck: ack-grep no está instalado; No tengo los permisos para instalarlo.
Phillip
1
No necesitaría ack-grep, puede usar los ejemplos en la pregunta como un comienzo (como dije), es decir, las find | xargs | greplíneas. Para la salida específica, man grepsiempre es útil leer.
slhck
@slhck: Gracias, así que lo hice grep -r --include=*.<type> "<string>" ., lo que funcionó. Desafortunadamente, la página de manual no es muy sencilla al mencionar el punto final.
Phillip

Respuestas:

11
find . -type f -name '*.extension' | xargs grep "string"

Este comando ejecuta find en el directorio local (.) Para cualquier archivo con nombres que coincidan con el patrón * .extension, luego ejecuta grep para "string" en los resultados de find . Tenga en cuenta que find es inherentemente recursivo. Siempre que pueda diferenciar los archivos que desea de los archivos que no tiene en función del nombre, esto debería funcionar para usted.

Fopedush
fuente
2
Esto rompe con los nombres de archivo que contienen espacios, debe usar la print0opción para estar más seguro.
slhck
Solo find -print0no ayudará, también use xargs -0:find . -type f -name "*.ext" -print0 | xargs -0 grep "string"
BurninLeo
0

Para enumerar el nombre del archivo, el número de línea en el archivo especificado y la línea aparece el texto:

for x in *.xxx; do [ -r $x ] | cat $x | grep -n TEXT | xargs printf "$x:%s\n";done

Solo se ejecutará en el directorio actual, pero lo formateará bien para usted.

MaQleod
fuente