我在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
答案 0 :(得分:3)
要使GNU -i
(Ubuntu,Linux)和BSD sed
(Mac OS X)使用相同的sed
表示法,您必须:
-i
选项。因此:
sed -i.bak 's/Alt/Dog/g' /tmp/example.txt
将与sed
的两种变体一起正常工作,创建备份文件/tmp/example.txt.bak
并使用修改后的输出覆盖原始/tmp/example.txt
文件。 (警惕具有多个链接或符号链接的文件。)
您不能在同一命令行中使用null后缀(无备份)。在GNU上,空字符串附加到-i
选项(概念上 - 正如您在问题中所示);在BSD上,空字符串必须是单独的参数。两个人永远不会见面。