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

3
我是一名在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个回答

7
为了使GNU sed(Ubuntu,Linux)和BSD sed(Mac OS X)都能使用相同的-i表示法,您必须遵循以下步骤:
  1. 始终提供(非空)备份后缀。
  2. 将后缀附加到-i选项。
因此:
sed -i.bak 's/Alt/Dog/g' /tmp/example.txt

这将正确地与sed的两个变体一起使用,并创建一个备份文件/tmp/example.txt.bak,并用修改后的输出覆盖原始文件/tmp/example.txt。(注意多链接或符号链接的文件。)

您不能在同一命令行中使用空后缀(无备份)。 在GNU上,空字符串附加到-i选项(按照您在问题中显示的概念); 在BSD上,空字符串必须是单独的参数。 二者永远不会相遇。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接