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

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

sed-i's/old\u link/new\u link/g'*

但是,当我在Mac OS X上试用时,我得到:

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

我以为我的Mac电脑运行的是一个普通的BASH shell。怎么了

编辑:

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

编辑:

下面是一个实际的例子,它导致了这种情况:

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的/old\u-link/new\u-link/g'*

发表评论