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