如何在源文件中grep某些文本?


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]'工作?
glenn jackman 2011年

Answers:


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 .

当我摆脱括号时,这对我有用
Mike

1

find命令可以调用grep本身。

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

及其变化。


将其更改为明显的变化。;-)
Keith

0

我可以这样添加 ~/.bashrc

alias cppgrep='grep -Ri "--include=*.[hc]" "--include=*.cpp" "--include=*.hpp"'
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.