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

时间:2012-09-04 08:23:59

标签: 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

是否还有其他人发表过类似的观察结果,甚至知道某种解决方法?

1 个答案:

答案 0 :(得分:4)

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

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

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