小编典典

带有 -i 选项的 sed 命令在 Mac 上失败,但在 Linux 上有效

all

我已成功使用以下sed命令在 Linux 中搜索/替换文本:

sed -i 's/old_link/new_link/g' *

但是,当我在我的 Mac OS X 上尝试它时,我得到:

“命令 c 需要 \ 后跟文本”

我以为我的 Mac 运行的是普通的 BASH shell。这是怎么回事?

编辑:

根据@High Performance,这是由于 Macsed具有不同的(BSD)风格,因此我的问题是如何在 BSD 中复制此命令sed

编辑:

这是一个导致此问题的实际示例:

sed -i 's/hello/gbye/g' *

阅读 93

收藏
2022-03-28

共1个答案

小编典典

如果您使用该-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' *

2022-03-28