grep(BSD grep)2.5.1-FreeBSD在mac os 10.8行regexp模式下不能使用重叠模式

grep(BSD grep)2.5.1-FreeBSD在mac os 10.8行regexp模式下不能使用重叠模式,grep,osx-mountain-lion,Grep,Osx Mountain Lion,mac os 10.8下的grep(version info:grep(BSD grep)2.5.1-FreeBSD)的股票版本在以line regex模式(-x)运行时,似乎存在模式共享公共前缀的问题。在下面的最小示例中,我希望grep报告“test”和“test2”,但只报告“test”。(单词regexp模式(-w)也是如此) 是否有其他人进行过类似的观察,甚至知道解决方法?已验证;这看起来确实像苹果和/或FreeBSD grep中的一个bug。(这对我来说完全不奇怪;FreeBSD gr

mac os 10.8下的grep(version info:grep(BSD grep)2.5.1-FreeBSD)的股票版本在以line regex模式(-x)运行时,似乎存在模式共享公共前缀的问题。在下面的最小示例中,我希望grep报告“test”和“test2”,但只报告“test”。(单词regexp模式(-w)也是如此)


是否有其他人进行过类似的观察,甚至知道解决方法?

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

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


@akostadinov建议在f2.txt中将较长的模式放在较短的模式之前,这似乎解决了这个问题,但我对依赖类似的东西持谨慎态度。它在这个玩具示例中起作用,但它是否在一般情况下起作用,以及当您发现它时会有多贵?

似乎是一个bug,无法测试我自己。作为一种解决方法,您是否尝试过在f1.txt中更改test和test2的位置?
printf "test\ntest2\n" > f1.txt
printf "test\ntest2\n" > f2.txt
grep -x -F -f f1.txt f2.txt