要根据字符串删除行

时间:2016-12-13 09:43:56

标签: shell unix

我的文件类似于test.yaml文件,文件内容如下文所示。

servers:
  - uri: "http://demo.nginx1.com/status"
    name: "NGinX Monitor1"
  - uri: "http://demo.nginx2.com/status"
    name: "NGinX Monitor2"

我想删除 - uri line和immediate next line(以name :)开头,其中host name = demo.nginx1.com。 我想要像下面这样。

servers:
  - uri: "http://demo.nginx2.com/status"
    name: "NGinX Monitor2"

我绑在下面.. cat test.yaml | grep -v demo.nginx1.com | grep -v Monitor1>> test_back.yaml mv test_back.yaml test.yaml

我得到了预期。但它正在重新创建文件而我不想重新创建文件

请帮助我使用合适的命令,我可以使用..

2 个答案:

答案 0 :(得分:1)

使用GNU sed

只是一个简单的逻辑
sed '/demo.nginx1.com/,+1 d' test.yaml
servers:
  - uri: "http://demo.nginx2.com/status"
    name: "NGinX Monitor2"

对于in-place替换,请将-i标记添加为-i.bak

sed -i.bak '/demo.nginx1.com/,+1 d' test.yaml

要查看就地替换: -

cat test.yaml
servers:
  - uri: "http://demo.nginx2.com/status"
    name: "NGinX Monitor2"

答案 1 :(得分:0)

因为我不喜欢使用正则表达式来破解你可以解析的东西 - 这就是我如何使用<li> <a class="btn navbar-button" href="#" style="display: block;">Button</a> </li> perl模块解决它:

YAML