协慌网

登录 贡献 社区

grep,但只有特定的文件扩展名

我正在编写一些脚本来grep某些目录,但这些目录包含各种文件类型。

我想grep只是.h.cpp现在,但也许其他几个人的未来。

到目前为止,我有:

{ grep -r -i CP_Image ~/path1/;

grep -r -i CP_Image ~/path2/;

grep -r -i CP_Image ~/path3/;

grep -r -i CP_Image ~/path4/;

grep -r -i CP_Image ~/path5/;} 

| mailx -s GREP [email protected]

任何人都可以告诉我如何添加特定的文件扩展名?

答案

只需使用--include参数,如下所示:

grep -r -i --include \*.h --include \*.cpp CP_Image ~/path[12345] | mailx -s GREP [email protected]

应该做你想要的。

语法说明:

  • -r - 递归搜索
  • -i - 不区分大小写的搜索
  • --include=\*.${file_extension} - 仅搜索与扩展名或文件模式匹配的文件

其中一些答案似乎语法太重,或者它们在我的 Debian 服务器上产生了问题。这对我很有用:

PHP 革命:如何在 Linux 中 Grep 文件,但只有某些文件扩展名?

即:

grep -r --include=\*.txt 'searchterm' ./

... 或不区分大小写的版本......

grep -r -i --include=\*.txt 'searchterm' ./
  • grep :命令

  • -r :递归地

  • -i :ignore-case

  • --include :all * .txt:文本文件(用 \ 文件转义,以防你在文件名中有一个带星号的目录)

  • 'searchterm' :搜索什么

  • ./ :从当前目录开始。

怎么样:

find . -name '*.h' -o -name '*.cpp' -exec grep "CP_Image" {} \; -print