Как я могу найти в исходных файлах текст?

8

На данный момент я использую две команды, я уверен, что должен быть лучший способ ...

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
источник
1
делает -name '*.[ch]'работу?
Гленн Джекман

Ответы:

10

ack (или, в Debian / Ubuntu, ack-grep) будет игнорировать не исходные файлы, такие как контроль версий или двоичные файлы. Очень полезный.

искать только файлы .c и .h, как указано выше:

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

--cc(чем больше форма --type cc) смотрит только на .c .h и .xs файлов. Полный список типов файлов доступен для просмотра ack-grep --help type. В большинстве случаев вам это особенно не нужно --type, так как обычно в нем будут только файлы для поиска, а затем файлы, которые вы не увидите по умолчанию, например, двоичные файлы, резервные копии и файлы контроля версий.

Алистер Булман
источник
5

Сама grepпрограмма может выполнять рекурсивный поиск, а также принимает опцию поиска только определенных файлов. Следующее эквивалентно вашим двум findкомандам.

grep -Ri --include=*.[ch] invalid\ preset .
garyjohn
источник
Это сработало для меня, когда я избавился от скобок
Майк
1

Команда find может сама вызывать grep.

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

и их вариации.

Кит
источник
Поменял это на очевидную вариацию. ;-)
Кит
0

Я могу добавить что-то подобное в ваш ~/.bashrc

alias cppgrep='grep -Ri "--include=*.[hc]" "--include=*.cpp" "--include=*.hpp"'
AlejandroVD
источник