【问题标题】:Find entry in .netrc file via bash and delete it if exists通过 bash 在 .netrc 文件中查找条目,如果存在则将其删除
【发布时间】:2015-07-13 05:31:45
【问题描述】:

在 bash 中,如何在文件 ~/.netrc 中搜索以下字符串并删除该行加上接下来的两行(如果找到):

machine api.mydomain.com

例子是:

machine api.mydomain.com
   user foo
   password bar

它应该删除所有三行,但我无法匹配user 和password,因为它们是未知的。唯一的固定值是machine api.mydomain.com。

【问题讨论】:

    标签: linux macos bash replace find


    【解决方案1】:

    试试:

    sed -i '' '/^machine api.mydomain.com$/{N;N;d;}' ~/.netrc
    

    当它找到machine api.mydomain.com 行时,它会再读取两行,然后将它们全部删除。其他线路不变通过。

    对于 GNU sed,-i 的参数是可选的。对于 OSX (BSD) sed,参数是必需的,但可以为空,如上所示。

    【讨论】:

      【解决方案2】:

      让我们一起 google 一下 - sed or awk: delete n lines following a pattern

      所以,答案是sed -e '/machine api.mydomain.com/,+2d' ~/.netrc。如果需要进行更改,请添加 -i 标志。

      【讨论】:

      • 这适用于 OS X 吗?获取sed: 1: "/machine api.mydomain.c ...": expected context address 我需要它才能在标准 Linux 和 OS X 上工作。
      • @Justin 对于 OSX,添加 -i,然后是空格,然后是 ''。换句话说,使用sed -i '' -e '/machine api.mydomain.com/,+2d' ~/.netrc
      • 还是不行。 sed -i '' -e '/machine api.mydomain.com/,+2d' ~/.netrc sed: 1: "/machine api.mydomain.c ...": 预期的上下文地址
      • @Justin “预期的上下文地址”:这是一个不同的问题。 OSX/BSD 不支持花哨的范围 (+2)。我刚刚写了一个避免这种情况的答案。
      猜你喜欢
      • 2023-04-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-04-16
      • 1970-01-01
      • 2013-12-12
      • 2015-10-13
      • 1970-01-01
      相关资源
      最近更新 更多