2011-10-27 29 views
14

我在Linux上使用此sed命令,修補一個文件,它工作正常:sed命令的作品,但不是在OS X

sed -i -r "s/(\tpublic function __call.*)/\1\n\t\treturn null;/" rb.php 

但是當我嘗試在OS X這個命令,我得到一個錯誤:

sed: 1: "s/(\tpublic function __ ...": \1 not defined in the RE 

所以,任何人都可以幫助我的命令,將在Linux和OS X上都可以工作嗎?

順便說一句,我試着命令,如:

sed -i '' -r "s/(\tpublic function __call.*)/\1\n\t\treturn null;/" rb.php 

,但它不工作在Linux上。

回答

28

對於Mac OS X sed,使用-E而不是-r來獲取ERE。另外,GNU擴展不在那裏,所以你需要文字字符而不是\t\n元字符。

或者只是安裝GNU sed,當然。

0

我認爲加入-E會使它適用於兩者。

+0

必要但不夠,恐怕。 –

1

(是perl的標準,而不是sed。您應該改用\(。 Mac OS X不使用GNU sed。

+0

'-r'是擴展正則表達式的標誌。所以我們不需要轉義'(' –

+0

'-r'沒有記錄在[Apple的sed手冊頁](http://developer.apple.com/library/mac/#documentation/Darwin/Reference/ManPages/ man1/sed.1.html)。 – mouviciel

+0

也許是一個GNU的東西。 –