2012-09-04 58 views
6

看起來像股票版本的grep(版本信息:grep(BSD grep)2.5.1-FreeBSD)在mac下os 10.8在用線性正則表達式模式(-x)運行時遇到了共享公共前綴的模式問題。在下面的最小例子中,我希望grep報告「test」和「test2」,但是隻報告「test」。 (對於字正則表達式模式(-w)也是如此)。grep(BSD grep)2.5.1-FreeBSD在mac os上10.8行正則表達式模式不能用於重疊模式

printf "test\ntest2\n" > f1.txt 
printf "test\ntest2\n" > f2.txt 
grep -x -F -f f1.txt f2.txt 

有沒有其他人做過類似的觀察,甚至知道解決方法?

+0

看起來像一個bug,不能測試自己。作爲解決方法,您是否嘗試在f1.txt中更改test和test2的位置? – akostadinov

回答

4

已驗證;這看起來像Apple和/或FreeBSD grep中的錯誤。 (這對我來說完全沒有什麼意思; FreeBSD grep是一個令人厭惡的標準,我的僱主在我們所有的Mac系統上都安裝了GNU grep,而不是忍受FreeBSD的古怪行爲,是的,GNU grep在你的例子中找到了兩行。 )

如果Mac和Linux之間的可移植性是客觀存在的,我強烈建議放棄grep乾脆只用perl(或類似ack,這取決於perl)。

@ akostadinov建議在f2.txt中較短的模式之前放置較長的模式似乎可以解決這個錯誤,但我會懷疑依賴於這樣的東西。它適用於這個玩具的例子,但它的工作原理一般,當你發現它會有多昂貴?