web-dev-qa-db-fra.com

Rechercher une chaîne récursivement dans le répertoire en cours

Je veux rechercher tous les fichiers récursivement dans le répertoire où je me trouve pour une chaîne particulière.

J'ai essayé

grep -r -i my_string

et je l'ai essayé dans un dossier de test avec deux fichiers minuscules mais il n'a pas trouvé la chaîne.

En outre, y a-t-il un moyen spécial de définir "contient" plutôt que de faire correspondre le mot entier?

13
David

Vous recherchez un nom de fichier ou un mot dans un fichier? grep cherche dans les fichiers, ce qui semble être ce que vous voulez.

grep utilise des expressions régulières - en fait, c’est ce que signifie la partie "re". Ainsi, il n’utilise pas les caractères génériques bash normaux; c'est-à-dire, abc* ne trouverait pas les mots commençant par abc, il trouverait les mots commençant par ab, puis zéro ou plusieurs c suivront. Mais oui, si vous lui donnez simplement un modèle, il le trouvera n'importe où, sans aucune connaissance des mots entiers. Si vous voulez trouver des mots entiers, vous devez créer une expression régulière pour le dire.

Mais, comme la plupart des commandes, vous devez mettre le nom du fichier à la fin de la commande. Ainsi, votre exemple resterait là et attendrait le nom du fichier.

Comme @plink a dit, utilisez

grep -r -o -i "your_string" *

(ou *.*, ou une autre spécification de fichier). Les erreurs peuvent être ignorées. Si vous obtenez beaucoup d'erreurs, vous pouvez ajouter 2>/dev/null à la fin, ce qui redirigera stderr vers un périphérique nul.

24
Marty Fried