【问题标题】:How to make sed -i work in both Mac and Ubuntu?如何使 sed -i 在 Mac 和 Ubuntu 中都可以工作?
【发布时间】:2016-03-20 18:18:21
【问题描述】:

我同时在 Mac 和 Ubuntu 上工作,所以我想让我的脚本在 Mac 和 Ubuntu 上都工作,但是 sed -i 在这两个系统中的工作方式不同:

在 Ubuntu 中,应该是:

sed -i'' 's/Alt/Dog/g' /tmp/example.txt

在 Mac 中,应该是:

sed -i '' 's/Alt/Dog/g' /tmp/example.txt

【问题讨论】:

    标签: macos ubuntu sed


    【解决方案1】:

    要使相同的-i 表示法同时适用于 GNU sed(Ubuntu、Linux)和 BSD sed(Mac OS X),您必须:

    1. 始终提供(非空)备份后缀。
    2. 将后缀附加到-i 选项。

    因此:

    sed -i.bak 's/Alt/Dog/g' /tmp/example.txt
    

    将与sed 的两种变体正常工作,创建备份文件/tmp/example.txt.bak 并用修改后的输出覆盖原始/tmp/example.txt 文件。 (请注意具有多个链接或符号链接的文件。)

    您不能在同一命令行中使用空后缀(无备份)。在 GNU 上,空字符串附加到 -i 选项(从概念上讲 - 正如您在问题中显示的那样);在 BSD 上,空字符串必须是一个单独的参数。双胞胎永远不会相遇。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-06-04
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多