为了账号安全,请及时绑定邮箱和手机立即绑定

sed命令-i选项在mac上失败,但在linux上工作。

sed命令-i选项在mac上失败,但在linux上工作。

胡子哥哥 2019-07-01 16:31:21
sed命令-i选项在mac上失败,但在linux上工作。我已经成功地使用了以下sed命令来搜索/替换Linux中的文本:sed -i 's/old_link/new_link/g' *然而,当我在我的MacOSX上试用它时,我得到:“命令c期望\后面跟着文本”我以为我的Mac会运行一个普通的Bash外壳。出什么事啦?编辑:根据@HighPerformance,这要归功于Macsed因此,我的问题是如何在bsd中复制此命令。sed?编辑:下面是一个实际的示例,其原因是:sed -i 's/hello/gbye/g' *
查看完整描述

3 回答

?
开满天机

TA贡献1786条经验 获得超13个赞

如果您使用-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 ...

    -无法在OSX上工作,因为它创建了

    -e

    备份
  • sed -i'' -e ...

    -在OSX 10.6上不工作,但在10.9+上工作
  • sed -i '' -e ...

    -不从事GNU工作

考虑到没有sed命令在所有平台上工作,您可以尝试使用另一个命令来实现相同的结果。

例如,perl -i -pe's/old_link/new_link/g' *


查看完整回答
反对 回复 2019-07-01
?
牛魔王的故事

TA贡献1830条经验 获得超3个赞

我相信在OSX上使用-i备份文件的扩展名是所需..试着:

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

使用GNUsed扩展是任选.


查看完整回答
反对 回复 2019-07-01
?
莫回无

TA贡献1865条经验 获得超7个赞

这适用于sed的GNU和BSD版本:

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

或者有后援:

sed -i'.bak' -e 's/old_link/new_link/g' *

注意后面缺少的空格-i选择!(GNU sed必需)


查看完整回答
反对 回复 2019-07-01
  • 3 回答
  • 0 关注
  • 1003 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信