OSX grep 支持负向后视吗?

Maf*_*uba 10 grep macos

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

grep -r '(?<!notthis)butthis' ./*
Run Code Online (Sandbox Code Playgroud)

当一些应该返回时,我没有得到任何结果。我错过了逃脱吗?还是 OSX 不支持正则表达式环视?

slh*_*hck 17

默认的 OS Xgrep仅支持POSIX 中定义的基本和扩展正则表达式,并在下面re_format(7)针对 OS X 进行了解释。这些风格不支持负后视。

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

相当于ack

ack '(?<!notthis)butthis'
Run Code Online (Sandbox Code Playgroud)

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


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

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