Come posso grep nei file di origine per alcuni testi?


8

Al momento sto usando due comandi, sono sicuro che ci deve essere un modo migliore ...

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

1
fa -name '*.[ch]'il lavoro?
Glenn Jackman,

Risposte:


10

ack (o, su Debian / Ubuntu, ack-grep) ignorerà i file non sorgente come il controllo della versione o i binari. Molto utile.

per cercare solo i file .c e .h, come sopra:

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

la --cc(la forma più lunga è --type cc) guarda solo i file .c .h & .xs. L'elenco completo dei tipi di file è visualizzabile con ack-grep --help type. La maggior parte delle volte, non sarà particolarmente necessario --type, poiché in genere avrà solo i file da cercare e quindi i file che non vedrai per impostazione predefinita, come file binari, backup e file di controllo della versione.


5

Il grepprogramma stesso può eseguire ricerche ricorsive e accetta anche un'opzione per cercare solo determinati file. Quanto segue equivale ai tuoi due findcomandi.

grep -Ri --include=*.[ch] invalid\ preset .

Questo ha funzionato per me quando mi sono sbarazzato delle parentesi
Mike

1

Il comando find può chiamare grep stesso.

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

e sue variazioni.


Modificato all'ovvia variazione. ;-)
Keith il

0

Posso aggiungere qualcosa del genere al tuo ~/.bashrc

alias cppgrep='grep -Ri "--include=*.[hc]" "--include=*.cpp" "--include=*.hpp"'
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.