【发布时间】: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
【问题讨论】:
我同时在 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
【问题讨论】:
要使相同的-i 表示法同时适用于 GNU sed(Ubuntu、Linux)和 BSD sed(Mac OS X),您必须:
-i 选项。因此:
sed -i.bak 's/Alt/Dog/g' /tmp/example.txt
将与sed 的两种变体正常工作,创建备份文件/tmp/example.txt.bak 并用修改后的输出覆盖原始/tmp/example.txt 文件。 (请注意具有多个链接或符号链接的文件。)
您不能在同一命令行中使用空后缀(无备份)。在 GNU 上,空字符串附加到 -i 选项(从概念上讲 - 正如您在问题中显示的那样);在 BSD 上,空字符串必须是一个单独的参数。双胞胎永远不会相遇。
【讨论】: