it-swarm-es.com

Búsqueda de texto recursivo con patrones grep y de archivo

Dado este ejemplo de estructura de carpetas:

/folder1/file1.txt[.____.font>/folder1/file2.djd[.____.font>/folder2/file3.txt[.____.font>/folder2/file2.fha

¿Cómo hago una búsqueda de texto recursiva en todos *.txt archivos con grep de "/"?

("grep -r <pattern> *.txt" falla cuando se ejecuta desde "/", ya que no hay .txt archivos en esa carpeta.)

46
Anders Sandvig

Mi versión de GNU Grep tiene un interruptor para esto:

grep -R --include='*.txt' $Pattern

Descrito de la siguiente manera:

--include=GLOB

Busque solo archivos cuyo nombre base coincida con GLOB (utilizando la coincidencia con comodines como se describe en --excluir).

62
Kyle Brandt

Si tiene una gran cantidad de archivos, sería útil incorporar xargs en el comando para evitar un error 'Lista de argumentos demasiado larga'.

find . -name '*.txt' -print | xargs grep <pattern>
20
Mark

es posible que pueda utilizar sus zsh 's EXTENDED_GLOB opción ( docs )

grep <pattern> **/*.txt
2
santa

Es posible que desee echar un vistazo a ack en http://betterthangrep.com , que tiene facilidades para seleccionar archivos para buscar por tipo de archivo.

1
Andy Lester
find . -name '*.txt' -type f -exec grep <pattern> {} \;
0
innaM

La respuesta de Mannis bifurcaría un nuevo proceso grep para cada archivo de texto. Si tiene lotes de archivos de texto allí, puede considerar agrupar primero cada archivo y elegir los archivos .txt cuando esté listo:

grep -r <pattern> * | grep \.txt:

Eso requiere más disco, pero podría ser más rápido de todos modos.

0
Commander Keen

Es 2019 y no hay forma de que todavía use grep para la búsqueda recursiva de texto.

En mi humilde opinión, las respuestas de hoy deben incluir ripgrep :

rg <pattern> -ttxt
0
santa