我已成功使用以下 sed
命令在 Linux 中搜索/替换文本:
sed -i 's/old_link/new_link/g' *
但是,当我在我的 Mac OS X 上尝试它时,我得到:
“命令 c 需要 \ 后跟文本”
我以为我的 Mac 运行的是普通的 BASH shell。这是怎么回事?
编辑:
根据@High Performance,这是由于Mac sed
具有不同的(BSD)风格,因此我的问题是如何在BSD sed
中复制此命令?
编辑:
这是一个导致此问题的实际示例:
sed -i 's/hello/gbye/g' *
原文由 Yarin 发布,翻译遵循 CC BY-SA 4.0 许可协议
如果您使用
-i
选项,您需要为备份提供扩展名。如果你有:
该命令(注意
-i
和''
和-e
之间没有空格,以使其在新版本的 Mac 和 GNU 上工作):创建 2 个备份文件,例如:
没有可移植的方法来避免制作备份文件,因为不可能找到适用于所有情况的 sed 命令组合:
sed -i -e ...
- 在 OS X 上不起作用,因为它创建-e
备份sed -i'' -e ...
- 不适用于 OS X 10.6 但适用于 10.9+sed -i '' -e ...
- 不适用于 GNU注意 鉴于没有适用于所有平台的 sed 命令,您可以尝试使用另一个命令来获得相同的结果。
例如,
perl -i -pe's/old_link/new_link/g' *