【发布时间】:2010-10-08 00:13:45
【问题描述】:
我在使用 Emacs 中的 grep 时遇到问题。
a) grep 似乎不理解用于搜索 .c 和 .h 文件的 .[ch]。这是 Emacs 使用 lgrep 命令提供的默认选项。示例是在 .c/.h 文件中搜索单词“global”。
grep -i -nH "global" *.[ch]
grep: *.[ch]: No such file or directory
Grep exited abnormally with code 2 at Mon Feb 16 19:34:36
这种格式无效吗?
b) 使用 rgrep 我收到以下错误:
find . "(" -path "*/CVS" -o -path "*/.svn" -o -path "*/{arch}" -o -path "*/.hg" -o -path "*/_darcs" -o -path "*/.git" -o -path "*/.bzr" ")" -prune -o -type f "(" -iname "*.[ch]" ")" -print0 | xargs -0 -e grep -i -nH "global"
FIND: Wrong parameter format
Grep finished (matches found) at Mon Feb 16 19:37:10
我在 Windows XP 上使用带有 GNU W32 实用程序(grep、find、xargs 等)的 Emacs 22.3.1。 grep v2.5.3 并找到 v4.2.20。
我错过了什么?
更新:
太糟糕了,不能接受多个答案...因为我的问题的解决方案已经展开。
grep -i -nH "global" *.c *.h
这解决了第一个问题。谢谢luapyad!
(setq find-program "c:\\path\\to\\gnuw32\\find.exe")
emacs 确实在使用 Windows find.exe。强制 gnu32 find 解决了第二个问题。谢谢斯科特弗雷泽。
不过,我还是最喜欢ack。
【问题讨论】:
-
一个更简单的使用rgrep的方法是:grep -r --include=*.[ch] --exclude=*/{CVS,.svn,arch,.hg,_darcs,.git, .bzr} -i -nH 全局 .
-
您能否更改您的帖子以准确反映 find-program 的答案?你今天给我带来了一些困难。不同之处在于需要双反斜杠。 (setq find-program "C:\\path\\to\\gnuw32\\find.exe")
-
@Matthew Talbert,我认为降价处理器正在吞噬额外的反斜杠。我提交了一个修改来解决这个问题。