OSX grep 是否支持负向后视?

OSX grep 是否支持负向后视?

我正在尝试做这样的事情:

grep -r '(?<!notthis)butthis' ./*

有些结果应该返回,但我没有得到。我是不是漏掉了转义符?还是 OSX 不支持正则表达式查找?

答案1

默认的OS Xgrep仅支持基本和扩展正则表达式定义见 POSIX,解释见re_format(7)适用于 OS X。这些版本不支持负向回顾。

如果你想要更强大的正则表达式语法,并结合以grep递归方式搜索目录以查找正则表达式模式的能力,你应该考虑使用ack,它是用 Perl 编写的,因此支持其正则表达式语法,包括负向后视。

等效ack于:

ack '(?<!notthis)butthis'

您可以ack通过以下方式安装:


值得注意的是GNUgrep有一个-P选项可以启用与 Perl 兼容的正则表达式语法,但它不包含在 OS X 中 - 您可以通过以下方式安装它自制如果您喜欢,可以使用brew install grep。在 Linux 上,它将默认可用。

如果您像我一样经常在 Linux 和 OS X 之间切换,我建议grep默认在 OS X 上使用 GNU,或完全使用ack替代grep品。

相关内容