Comment utiliser grep pour rechercher dans le répertoire en cours tous les fichiers ayant une chaîne “hello” et afficher uniquement les fichiers .h et .cc?

Comment utiliser grep pour rechercher dans le répertoire actuel les fichiers contenant la chaîne “hello” et afficher uniquement les fichiers .h et .cc?

grep -r --include=*.{cc,h} "hello" . 

Cela se lit comme suit: recherchez de manière récursive (dans tous les sous-répertoires également) tous les fichiers .cc OR .h contenant “hello” . (répertoire actuel

A partir d’une autre question de stackoverflow

Vous pouvez transmettre des caractères génériques au lieu de spécifier des noms de fichiers ou d’utiliser stdin.

 grep hello *.h *.cc 

find . -name \*.cc -print0 -or -name \*.h -print0 | xargs -0 grep "hello" find . -name \*.cc -print0 -or -name \*.h -print0 | xargs -0 grep "hello" .

Consultez les pages de manuel pour find et xargs pour plus de détails.

Si je lis attentivement votre question, vous demandez à “grep de rechercher dans le répertoire actuel tous les fichiers contenant la chaîne” hello “et d’afficher uniquement les fichiers .h et .cc”. Donc, pour répondre à vos exigences précises, voici ma soumission:

Cela affiche les noms de fichiers:

 grep -lR hello * | egrep '(cc|h)$' 

… et cela affiche les noms de fichiers et leur contenu:

 grep hello `grep -lR hello * | egrep '(cc|h)$'` 

Si vous avez besoin d’une recherche récursive, vous disposez de plusieurs options. Vous devriez considérer ack .

A défaut, si vous avez GNU find et xargs :

 find . -name '*.cc' -print0 -o -name '*.h' -print0 | xargs -0 grep hello /dev/null 

L’utilisation de /dev/null vous permet d’obtenir les noms de fichiers imprimés; les -print0 et -0 traitent des noms de fichiers contenant des espaces (nouvelles lignes, etc.).

Si vous n’avez pas de noms obstinés (avec des espaces, etc.), vous pouvez utiliser:

 find . -name '*.*[ch]' -print | xargs grep hello /dev/null 

Cela pourrait ramener 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 et xargs .

 grep -l hello **/*.{h,cc} 

Vous voudrez peut-être shopt -s nullglob pour éviter les messages d’erreur s’il n’y a pas de fichiers .h ou no .cc.

Pour rechercher dans le répertoire courant de manière récursive:

 grep -r 'mySsortingng' . 

La manière la plus simple: grep -Ril “Your text” /