Comment utiliser grep pour rechercher dans le répertoire courant tous les fichiers contenant la chaîne "bonjour" et afficher uniquement les fichiers .h et .cc?
139
grep -r --include=*.{cc,h} "hello" .
Cela lit: recherche récursive (dans tous les sous-répertoires également) pour tous les fichiers .cc OU .h qui contiennent "bonjour" dans ce .
répertoire (actuel)
grep -si "hello" --include=*.{cc,h} ./* ./.*
(recherche également les fichiers cachés). Voici une version générique pour rechercher une chaîne dans tous les fichiers / cachés:grep -s "hello" * .*
. Peut-être le plus généralement utile (et le plus simple), cela recherche tous les fichiers non cachés pour "bonjour":grep -si "hello" ./*
Merci à ce post: askubuntu.com/a/777456grep -r --include=*.{java,py} "hello" .
Vous pouvez passer des caractères génériques au lieu de spécifier des noms de fichiers ou d'utiliser stdin.
la source
-R
ne fonctionne malheureusement pas. Il étend le*
avant d'aller récursivement.$ grep -R hello *
# find from all the wordfind . -name \*.cc -print0 -or -name \*.h -print0 | xargs -0 grep "hello"
.Consultez les pages de manuel pour
find
etxargs
pour plus de détails.la source
-print0
après le'*.cc'
, sinon vous n'avez pas d'action pour cette partie de la recherche. Ou vous devez insérer entre parenthèses là:find . \( -name '*.cc' -or -name '*.h' \) -print0
.find -exec +
syntaxe au lieu de xargs-exec grep "hello" {} +
où la paire d'accolades représente le (s) nom (s) de fichier. Bonne suggestion.Pour rechercher récursivement dans le répertoire courant:
la source
Si vous avez besoin d'une recherche récursive, plusieurs options s'offrent à vous. Vous devriez envisager
ack
.A défaut, si vous avez GNU
find
etxargs
:L'utilisation de
/dev/null
garantit que vous obtenez les noms de fichiers imprimés; les-print0
et-0
traite les noms de fichiers contenant des espaces (sauts de ligne, etc.).Si vous n'avez pas de noms difficiles (avec des espaces, etc.), vous pouvez utiliser:
Cela peut prendre quelques noms que vous n'aviez pas l'intention, car la correspondance de modèle est plus floue (mais plus simple), mais fonctionne autrement. Et cela fonctionne avec les versions non-GNU de
find
etxargs
.la source
find ... -exec grep "hello" {} +
Si je lis attentivement votre question, vous demandez à "grep de rechercher dans le répertoire courant tous les fichiers contenant la chaîne" hello "et d'afficher uniquement les fichiers .h et .cc". Donc, pour répondre à vos besoins précis, voici ma soumission:
Cela affiche les noms de fichiers:
... et cela affiche les noms et le contenu des fichiers:
la source
Vous souhaiterez peut-être
shopt -s nullglob
éviter les messages d'erreur s'il n'y a pas de fichiers .h ou pas .cc.la source
Le moyen le plus simple: grep -Ril "Votre texte" /
la source