我想在当前目录及其子目录下的每个.m文件中找到所有出现的ncread
。我使用以下命令:
grep -R --include="\.m" ncread .
但命令会返回nothings。 grep的联机帮助表示:
--include=GLOB
Search only files whose basename matches GLOB
为什么它不起作用?谢谢!
答案 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系统上,我已经通过实验证实它实际上是一个正则表达式。