我已成功使用以下 sed
命令在 Linux 中搜索/替换文本:
sed -i 's/old_link/new_link/g' *
但是,当我在我的 Mac OS X 上尝试它时,我得到:
"command c expects \ followed by text"
我以为我的 Mac 运行的是普通的 BASH shell。怎么了?
编辑:
根据@High Performance,这是由于 Mac sed
具有不同的 (BSD) 风格,因此我的问题是如何在 BSD sed
?
编辑:
这是一个导致此问题的实际示例:
sed -i 's/hello/gbye/g' *
最佳答案
如果您使用 -i
选项,则需要为备份提供扩展名。
如果你有:
File1.txt
File2.cfg
该命令(注意 -i
和 ''
和 -e
之间缺少空格,以使其适用于新版本的Mac 和 GNU):
sed -i'.original' -e 's/old_link/new_link/g' *
创建 2 个备份文件,例如:
File1.txt.original
File2.cfg.original
没有可移植的方法来避免制作备份文件,因为不可能找到适用于所有情况的混合 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' *
https://stackoverflow.com/questions/4247068/