带有-i选项的sed命令在Mac上失败,但在Linux上工作
我已成功使用以下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' *
回答:
如果使用该-i
选项,则需要为备份提供扩展名。
如果你有:
File1.txtFile2.cfg
该命令(注意缺乏之间的空间-i
,并''
与-e
以使其在Mac和在GNU新版本一起使用):
sed -i'.original' -e 's/old_link/new_link/g' *
创建2个备份文件,例如:
File1.txt.originalFile2.cfg.original
没有可移植的方法来避免制作备份文件,因为不可能找到适用于所有情况的sed命令混合:
sed -i -e ...
-创建-e
备份时在OS X上不起作用sed -i'' -e ...
-不适用于OS X 10.6,但适用于10.9+sed -i '' -e ...
-不适用于GNU
鉴于在所有平台上都没有sed命令,您可以尝试使用另一个命令来获得相同的结果。
例如, perl -i -pe's/old_link/new_link/g' *
以上是 带有-i选项的sed命令在Mac上失败,但在Linux上工作 的全部内容, 来源链接: utcz.com/qa/402787.html