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


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

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 .

Это сработало для меня, когда я избавился от скобок
Майк

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"'
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.