我正在尝试做这样的事情:
grep -r '(?<!notthis)butthis' ./*
有些结果应该返回,但我没有得到。我是不是漏掉了转义符?还是 OSX 不支持正则表达式查找?
答案1
默认的OS Xgrep
仅支持基本和扩展正则表达式定义见 POSIX,解释见re_format(7)
适用于 OS X。这些版本不支持负向回顾。
如果你想要更强大的正则表达式语法,并结合以grep
递归方式搜索目录以查找正则表达式模式的能力,你应该考虑使用ack
,它是用 Perl 编写的,因此支持其正则表达式语法,包括负向后视。
等效ack
于:
ack '(?<!notthis)butthis'
您可以ack
通过以下方式安装:
- 自制和
brew install ack
- 这Perl 的 CPAN 中的模块
- 下载单个可执行文件在主页上
值得注意的是GNUgrep
有一个-P
选项可以启用与 Perl 兼容的正则表达式语法,但它不包含在 OS X 中 - 您可以通过以下方式安装它自制如果您喜欢,可以使用brew install grep
。在 Linux 上,它将默认可用。
如果您像我一样经常在 Linux 和 OS X 之间切换,我建议grep
默认在 OS X 上使用 GNU,或完全使用ack
替代grep
品。