如何使sed -i在Mac和Ubuntu中都能正常工作?

时间:2015-12-15 04:21:58

标签: macos ubuntu sed

我在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

1 个答案:

答案 0 :(得分:3)

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

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

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

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

    您不能在同一命令行中使用null后缀(无备份)。在GNU上,空字符串附加到-i选项(概念上 - 正如您在问题中所示);在BSD上,空字符串必须是单独的参数。两个人永远不会见面。