我正在尝试做这样的事情:
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通过以下方式安装:
brew install ack值得注意的是,GNUgrep有一个-P选项来启用 Perl 兼容的正则表达式语法,但是它不包含在 OS X 中——如果你喜欢,可以通过Homebrew安装它brew install grep。在 Linux 上,它将默认可用。
如果您经常在 Linux 和 OS X 之间切换,就像我一样,我建议grep默认在 OS X 上使用 GNU ,或者完全ack用作grep替代品。