这似乎是股票的grep,(版本信息:grep的(BSD的grep)2.5.1的FreeBSD)在Mac OS 10.8与模式共享一个共同的前缀行正则表达式模式(-x)中运行时的问题。 在下面的小例子,我预计grep的报告“测试”和“测试2”而只是“测试”报告。 (同样也适用于正则表达式字模式(-w)真)。
printf "test\ntest2\n" > f1.txt
printf "test\ntest2\n" > f2.txt
grep -x -F -f f1.txt f2.txt
有没有其他人提出了类似意见,甚至知道一个解决方法吗?
验证; 这看起来像苹果和/或FreeBSD grep的一个bug。 (这是完全不足为奇对我来说,FreeBSD的grep的是一个标准的恨一堆便便,我的雇主安装在我们所有的Mac系统GNU的grep,而不是忍受了FreeBSD的古怪行为是的,GNU的grep在你的榜样发现两条线。 )
如果Mac和Linux之间的可移植性是客观存在的,我强烈建议放弃grep
干脆只用perl
(或类似ack
,它依赖于perl
)。
@ akostadinov的建议,把较长的模式之前在f2.txt短的似乎解决的bug,但我会持怀疑态度, 依靠这样的事情的。 它适用于这个玩具的例子,但它在一般的工作,以及如何昂贵的,当你发现了会是什么?
文章来源: grep (BSD grep) 2.5.1-FreeBSD on mac os 10.8 line regexp mode not working with overlapping patterns