Comment puis-je grep dans les fichiers source pour du texte?

8

En ce moment j'utilise deux commandes, je suis sûr qu'il doit y avoir une meilleure façon ...

wim@wim-acer:~/ffmpeg$ find . -name "*.h" -print0 | xargs -0 grep -i invalid\ preset
wim@wim-acer:~/ffmpeg$ find . -name "*.c" -print0 | xargs -0 grep -i invalid\ preset
wim
la source
1
ça -name '*.[ch]'marche?
glenn jackman

Réponses:

10

ack (ou, sur Debian / Ubuntu, ack-grep) ignorera les fichiers non sources comme le contrôle de version ou les binaires. Très utile.

pour rechercher uniquement les fichiers .c et .h, comme ci-dessus:

ack-grep -i --cc "invalid preset"

le --cc(le formulaire le plus long est --type cc) ne regarde que les fichiers .c .h & .xs. La liste complète des types de fichiers est visible avec ack-grep --help type. La plupart du temps, vous n'aurez pas particulièrement besoin de --type, car il n'aura généralement que les fichiers à rechercher, puis les fichiers que vous ne verrez pas par défaut, comme les fichiers binaires, les sauvegardes et les fichiers de contrôle de version.

Alister Bulman
la source
5

Le grepprogramme lui-même peut effectuer une recherche récursive et accepte également une option pour rechercher uniquement certains fichiers. Ce qui suit est équivalent à vos deux findcommandes.

grep -Ri --include=*.[ch] invalid\ preset .
garyjohn
la source
Cela a fonctionné pour moi lorsque je me suis débarrassé des supports
Mike
1

La commande find peut appeler grep elle-même.

find . \( -name "*.c" -o -name "*.h" \) -exec grep -i "invalid preset" {} \; -print

et leurs variantes.

Keith
la source
Changé à la variation évidente. ;-)
Keith
0

Je peux ajouter quelque chose comme ça à votre ~/.bashrc

alias cppgrep='grep -Ri "--include=*.[hc]" "--include=*.cpp" "--include=*.hpp"'
AlejandroVD
la source