使用grep --include选项?

时间:2012-03-01 08:32:00

标签: include grep

我想在当前目录及其子目录下的每个.m文件中找到所有出现的ncread。我使用以下命令:

grep -R --include="\.m" ncread .

但命令会返回nothings。 grep的联机帮助表示:

--include=GLOB
  Search only files whose basename matches GLOB

为什么它不起作用?谢谢!

4 个答案:

答案 0 :(得分:5)

因为foobar.m的基本名称是foobar

像这样使用find和grep:

find -name "*.m" | xargs grep "ncread"

或者如果您的文件名恰好有空格:

find -name "*.m" -print0 | xargs -0 grep "ncread"

修改
以下是使用grep:

的方法
grep -R --include='*.m' ncread .

答案 1 :(得分:5)

glob不是regexp,因此你需要使用glob语法而不是正则表达式语法:--include='*.m'(注意单引号:你想逃避glob以避免shell的扩展)

全球字符摘要:

* - any number of any characters
? - any single character
[abc] - single 'a', 'b' or 'c' character
\ - escaping, e.g. \* = single '*' character

如果您需要更多详细信息,可以在此处开始阅读有关glob的内容:Wiki page about glob

答案 2 :(得分:2)

如果有人仍然感兴趣,我的ubuntu精确地在grep版本2.10中打破了--include,我通过从GNU网站http://www.gnu.org/software/grep/#TOCdownloading下载新版本的grep(2.14)并从中编译来修复它源。

-download the archive called grep-2.14.tar.xz
-unpack it: xz -d grep-2.14.tar.xz
-untar it: tar -xf grep-2.14.tar
-remove the garbage: rm grep-2.14.tar
-go to its directory: cd grep-2.14
-do: ./configure
-then: make
-and finally: sudo make install

现在运行grep --version以确保您现在已安装2.14。 如果它仍然报告旧版本,请尝试关闭终端窗口并打开一个新版本。

答案 3 :(得分:1)

试试这个

grep -R --include="\\.m" ncread *

grep manpage说包含模式是一个GLOB,但至少在我的cygwin系统上,我已经通过实验证实它实际上是一个正则表达式。