包含命令在OSX Zsh中不起作用

我正在关注如何在Linux上查找包含特定文本的所有文件? 在我的项目中搜索字符串。

这是我的命令grep --include=*.rb -rnw . -e "pattern" grep --include=*.rb -rnw . -e "pattern"

Zsh告诉我, zsh: no matches found: --include=*.rb

看来grep不支持--include选项。

当我输入grep --help ,它会返回

usage: grep [-abcDEFGHhIiJLlmnOoPqRSsUVvwxZ] [-A num] [-B num] [-C[num]]
    [-e pattern] [-f file] [--binary-files=value] [--color=when]
    [--context[=num]] [--directories=action] [--label] [--line-buffered]
    [--null] [pattern] [file ...]

没有--include这里。

我的grep版本太旧了吗? 或者我的命令有问题吗?


FreeBSD / OSX grep DOES支持--include选项(请参阅man grep ;不幸的是,命令行帮助不会列出此选项),但问题在于选项参数*.rb未加引号

因此,它是您的shell zsh尝试将路径名展开为--include=*.rb ,并且失败,因为当前目录不包含名称与--include=*.rb匹配的--include=*.rb
grep甚至不会执行。

由于您的意图是将*.rb未修改为grep ,因此您必须引用它

grep --include='*.rb' -rnw . -e "pattern"     

如果你的grep不支持--include ,并且你不想为此安装GNU grep ,有许多便携的方法可以执行相同的操作。 试试我的头顶

find . -type f -name '*.rb' -exec grep -nw "pattern" /dev/null {} ;

find命令遍历目录(例如grep -r )查找名为*.rb文件(如--include选项),而/dev/null非常有用,因为当您在多个文件上运行grep显示的输出格式略有不同。

这有点低效,因为它为每个文件运行一个单独的grep 。 如果速度太慢,请查看xargs (或使用find -exec ... {} +而不是... {} ;如果您的find支持)。 这是一项非常普遍的任务; 你应该很容易找到成千上万的例子。

您可能还需要考虑ack这是一个受欢迎的,有点更人性化的选择。 它是独立的,所以“安装”等于将它复制到你的$HOME/bin

链接地址: http://www.djcxy.com/p/13675.html

上一篇: include command doesn't work in OSX Zsh

下一篇: rnw": search for a string in all files