我在Linux上使用这个sed命令来修补一个文件,它运行正常:
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上不起作用。
答案 0 :(得分:28)
对于Mac OS X sed,请使用-E
代替-r
来获取ERE。此外,GNU扩展不存在,因此您需要文字字符而不是\t
和\n
元字符。
或者只是安装GNU sed。
答案 1 :(得分:1)
(
是perl的标准,而不是sed。您应该使用\(
代替。 Mac OS X不使用GNU sed。
答案 2 :(得分:0)
我认为添加-E
会使它适用于两者。