【问题标题】:using sed -i Mac OSX without a backup file在没有备份文件的情况下使用 sed -i Mac OSX
【发布时间】:2016-02-27 16:12:37
【问题描述】:

我发现了这个帖子:Variations of sed between OSX and GNU/Linux

SED without backup file

它提供了在 Mac OSX 上使用 sed -i 的解决方案,这样它就不会在搜索和替换命令上创建备份文件。

例如, 注意 -i 选项后的单引​​号空格单引号指定零长度扩展:

sed -i ' ' 's/foo/|bar/g' test.html

我的问题 - 这确实为我创建了一个备份文件,它为备份文件提供了与我的输入文件相同的名称,“test.html”

我需要对许多文件进行搜索/替换,并且我不想要备份文件。

这是我的实际命令:

sed -i ' ' "s|research/projects/vertebrategenome/havana/|science/groups/vertebrate-annotation|g" test2.html

我在哪里得到一个名为“test2.html”的备份文件

【问题讨论】:

  • 如果您在两个 ' 字符之间有一个空格字符,请删除空格并使用 -i '' 。还你怎么知道你有一个备份文件,编辑你的 Q 以包含 ls -ls firstFileInDir* 的输出。祝你好运。
  • @cath,如果它对您有用,介意将答案标记为已接受的答案吗?谢谢
  • @atifm - 谢谢!我点击了绿色检查,我认为这是正确的。

标签: macos sed


【解决方案1】:

在 mac 上,您将获得 BSD 版本的 sed。它需要包含一个空字符串作为 -i 的参数。请注意,在 linux 上,很乐意接受不带扩展名的 -i。

在 Linux 上:

sed -i 's|StringToReplace|ReplacedString|'

在 MacOSX/*BSD 上

sed -i '' 's|StringToReplace|ReplacedString|'

注意,你需要一个空字符串('')而不是空白('')。

【讨论】:

    【解决方案2】:

    我发现在 Linux 和 Mac 上使用相同脚本的最佳方法是:

    sed -i.bak -e 's/foo/bar/' -- ${TARGET}
    rm ${TARGET}.bak
    

    【讨论】:

      猜你喜欢
      • 2014-10-18
      • 2012-02-12
      • 2021-02-16
      • 1970-01-01
      • 2013-04-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-09-12
      相关资源
      最近更新 更多