Wie kann ich Quelldateien nach Text durchsuchen?

8

Im Moment benutze ich zwei Befehle, ich bin mir sicher, dass es einen besseren Weg geben muss ...

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
quelle
1
nicht -name '*.[ch]'arbeiten?
Glenn Jackman

Antworten:

10

ack (oder unter Debian / Ubuntu ack-grep) ignoriert Nicht-Quelldateien wie Versionskontrolle oder Binärdateien. Sehr hilfreich.

So durchsuchen Sie nur C- und H-Dateien:

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

Die --cc(die längere Form ist --type cc) betrachtet nur .c .h & .xs-Dateien. Die vollständige Liste der Dateitypen kann mit angezeigt werden ack-grep --help type. In den meisten Fällen benötigen Sie das nicht besonders --type, da in der Regel nur die zu durchsuchenden Dateien vorhanden sind und dann Dateien, die standardmäßig nicht angezeigt werden, z. B. Binärdateien, Sicherungen und Versionskontrolldateien.

Alister Bulman
quelle
5

Das grepProgramm selbst kann rekursiv suchen und akzeptiert auch die Option, nur bestimmte Dateien zu durchsuchen. Das Folgende entspricht Ihren beiden findBefehlen.

grep -Ri --include=*.[ch] invalid\ preset .
garyjohn
quelle
Dies funktionierte für mich, als ich die Klammern loswurde
Mike
1

Der Befehl find kann grep selbst aufrufen.

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

und Variationen davon.

Keith
quelle
Es wurde in die offensichtliche Variante geändert. ;-)
Keith
0

Ich kann so etwas zu deinem hinzufügen ~/.bashrc

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