grep(BSD grep)2.5.1-FreeBSD在mac os 10.8行正则表达式模式下不能处理重叠模式

ahe*_*zel 6 grep osx-mountain-lion

看起来像mac os 10.8下的grep版本信息(版本信息:grep(BSD grep)2.5.1-FreeBSD)在使用行正则表达式模式(-x)时共享公共前缀的模式存在问题.在下面的最小例子中,我希望grep报告"test"和"test2",但只报告"test".(对于单词regexp模式(-w)也是如此).

printf "test\ntest2\n" > f1.txt
printf "test\ntest2\n" > f2.txt
grep -x -F -f f1.txt f2.txt
Run Code Online (Sandbox Code Playgroud)

有没有其他人做过类似的观察甚至知道一个变通方法?

Quu*_*one 5

已验证;这确实看起来像 Apple 和/或 FreeBSD grep 中的错误。(这对我来说完全不足为奇;FreeBSD grep 是一堆讨厌标准的便便。我的雇主在我们所有的 Mac 系统上安装了 GNU grep,而不是忍受 FreeBSD 的古怪行为。是的,GNU grep 在您的示例中找到了这两行。 )

如果 Mac 和 Linux 之间的可移植性是一个目标,我强烈建议grep完全放弃并只使用perl(或类似的东西ack,这取决于perl)。

@akostadinov 建议在 f2.txt 中将较长的模式放在较短的模式之前似乎可以解决这个错误,但我对依赖类似的东西持怀疑态度。它适用于这个玩具示例,但它一般有效吗?当你发现时它会贵吗?