Recherche de texte récursive avec grep et modèles de fichiers


46

Étant donné cet exemple de structure de dossier:

/folder1/file1.txt
/folder1/file2.djd
/folder2/file3.txt
/folder2/file2.fha

Comment faire une recherche de texte récursive sur tous les *.txtfichiers avec grep"/"?

( "grep -r <pattern> *.txt"échoue lorsqu’il est exécuté à partir de "/", car il n’ya aucun .txtfichier dans ce dossier.)

Réponses:


61

Ma version de GNU Grep a un commutateur pour cela:

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

Décrit comme suit:

--include=GLOB

Recherchez uniquement les fichiers dont le nom de base correspond à GLOB (en utilisant une correspondance générique comme décrit sous --exclude).


19

Si vous avez un grand nombre de fichiers, il serait utile d'incorporer xargs dans la commande pour éviter une erreur 'Argument list too long'.

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

6
S'il existe des espaces dans l'un des noms de fichier ou de répertoire, utilisez le formulaire suivant: find. -name '* .txt' -print0 | xargs -0 grep <modèle>
Jason Luther

2
Et bien sûr, il y a la question des noms de fichiers qui commence par -.
TJ Crowder le

grepest plus rapide de find.
Nabi KAZ

2

vous pourriez être en mesure d'utiliser votre zshde » EXTENDED_GLOBoption ( docs )

grep <pattern> **/*.txt

Seulement si OP utilise zsh, mais néanmoins intéressant.
Law29


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

vous voudrez peut-être utiliser "find. -name '* .txt' -type f -exec grep <modèle> {} +" pour qu'il se comporte plutôt comme la version de Mark Robinson - fonctionne uniquement avec GNU find à ma connaissance
serverhorror

0

La réponse de Mannis créerait un nouveau processus grep pour chaque fichier texte. Si vous avez beaucoup de fichiers texte là-bas, vous pouvez commencer par chercher d'abord tous les fichiers et choisir les fichiers .txt à la fin:

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

C'est plus gourmand en disque, mais peut être plus rapide de toute façon.


0

Nous sommes en 2019 et il est impossible que j'utilise quand même grep pour la recherche de texte récursive.

Les réponses devraient inclure mon humble avis ripgrep :

rg <pattern> -ttxt
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.