Je veux rechercher tous les fichiers récursivement à partir du répertoire dans lequel je suis 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 petits fichiers, mais il n'a pas trouvé la chaîne.
De plus, existe-t-il un moyen spécial de définir «contient» plutôt que de faire correspondre le mot entier?
grep -r -o -i "your_string" *
(avec "guillemets").Réponses:
Recherchez-vous un nom de fichier ou un mot dans un fichier? grep recherche dans les fichiers, ce qui semble être ce que vous voulez.
grep utilise des expressions régulières - en fait, c'est ce que la partie "re" représente. Ainsi, il n'utilise pas les caractères génériques bash normaux; c'est-à-dire,
abc*
ne trouverait pas de mots commençant par abc, il trouverait des mots commençant par ab, puis zéro ou plusieurs c suivants. Mais oui, si vous lui donnez simplement un modèle, il le trouvera n'importe où, sans connaissance de mots entiers. Si vous vouliez trouver des mots entiers, vous auriez besoin de créer une expression régulière pour le dire.Mais, comme la plupart des commandes, vous devez mettre le (s) nom (s) de fichier à la fin de la commande, donc votre exemple resterait là et attendrait le nom de fichier.
Comme l'a dit @plink, utilisez
(ou
*.*
, ou autre spécification de fichier). Les erreurs peuvent être ignorées. Si vous obtenez beaucoup d'erreurs, vous pouvez ajouter2>/dev/null
à la fin, ce qui redirigera stderr vers un périphérique nul.la source