【问题标题】:Sed command works on Linux, but not on OS Xsed 命令适用于 Linux,但不适用于 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。

【问题讨论】:

    标签: linux macos sed


    【解决方案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 将使其适用于两者。

      【讨论】:

      • 恐怕是必要但不充分。
      猜你喜欢
      • 1970-01-01
      • 2021-05-02
      • 1970-01-01
      • 2021-06-17
      • 2011-03-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-07-17
      相关资源
      最近更新 更多