题 Sed命令适用于Linux,但不适用于OS X.


我在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上不起作用。


14
2017-10-27 09:04


起源




答案:


对于Mac OS X sed,请使用 -E 代替 -r 获得ERE。此外,GNU扩展不在那里,所以你需要文字字符而不是 \t 和 \n 元字符。

或者只是安装GNU sed。


28
2017-10-27 09:27





( 是perl的标准,而不是sed。你应该用 \( 代替。 Mac OS X不使用GNU sed。


1
2017-10-27 09:10



-r 是扩展正则表达式的标志。所以我们不需要逃避 ( - Prince John Wesley
-r 未记录在案 Apple的sed手册页。 - mouviciel
也许是GNU的东西。 - Prince John Wesley


我想补充一下 -E 将使它适用于两者。


0
2017-10-27 09:09



我担心,这是必要但不充分的。 - Michael J. Barber