2015-12-15 81 views
1

我在Mac和Ubuntu的工作,所以我要让我的脚本工作,同时支持Mac和Ubuntu,但在这两个系统sed -i的工作方式不同:如何让sed -i在Mac和Ubuntu上都能工作?

在Ubuntu中,它应该是:

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

在Mac,它应该是:

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

回答

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上,空字符串必须是单独的参数。从来没有两个人见面。

相关问题