sed 命令适用于 Linux,但不适用于 OS X
Posted
技术标签:
【中文标题】sed 命令适用于 Linux,但不适用于 OS X【英文标题】:Sed command works on Linux, but not on OS X 【发布时间】:2011-12-16 08:36:54 【问题描述】:我在 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。
【问题讨论】:
【参考方案1】:对于 Mac OS X sed,使用 -E
而不是 -r
来获取 ERE。此外,没有 GNU 扩展,因此您需要文字字符而不是 \t
和 \n
元字符。
当然,或者只是安装 GNU sed。
【讨论】:
【参考方案2】:(
是 perl 的标准,而不是 sed。您应该改用\(
。 Mac OS X 不使用 GNU sed。
【讨论】:
-r
是扩展正则表达式的标志。所以我们不需要逃避(
-r
未记录在 Apple's sed man page 中。【参考方案3】:
我认为添加-E
将使其适用于两者。
【讨论】:
恐怕是必要但不充分。以上是关于sed 命令适用于 Linux,但不适用于 OS X的主要内容,如果未能解决你的问题,请参考以下文章
Stan 代码适用于 Windows 但不适用于 Linux
Grails 上的同步块适用于 Windows,但不适用于 linux
使用 sed 删除匹配模式不适用于 mac os Catalina
JavaFX .jar 适用于 Windows 和 OSX,但不适用于 Linux
带有 ssh 的 Git 克隆适用于 Linux,但不适用于 Windows PowerShell
jupyter notebook 中的 multiprocessing.Pool 适用于 linux 但不适用于 windows