我同时在 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
文件,其中包含修改后的输出。 (警惕具有多个链接或符号链接(symbolic link)的文件。)
您不能在同一命令行中使用空后缀(无备份)。在 GNU 上,空字符串附加到 -i
选项(概念上——如您在问题中所示);在 BSD 上,空字符串必须是一个单独的参数。永远不会相遇。
关于macos - 如何使 sed -i 在 Mac 和 Ubuntu 中都工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34281077/