Sed 从yaml文件中删除匹配行

Sed 从yaml文件中删除匹配行,sed,yaml,Sed,Yaml,我有一个yaml文件: version: xxx description: xxx inspec_version: "~> 4" depends: - name: yyy url: random-url supports: - platform: aws 如何将其从文件中删除 depends: - name: yyy url: random-url 因此,该文件将如下所示: version: xxx description: xxx inspec_versi

我有一个yaml文件:

version: xxx
description: xxx
inspec_version: "~> 4"
depends:
- name: yyy
  url: random-url
supports:
- platform: aws
如何将其从文件中删除

depends:
- name: yyy
  url: random-url
因此,该文件将如下所示:

version: xxx
description: xxx
inspec_version: "~> 4"
supports:
- platform: aws
名称和url值可以是随机的,但始终是
取决于:名称、url

我在第一行尝试了sed,但没有成功:

 sed -i '^depends:' test.yml   

请尝试使用
sed-i'/^dependens:/d'test.yml

这样做可以:

sed '/^depends:/,/url:/d' your_file
它将删除所有出现的线以及与这两种图案匹配的线之间的线
^取决于:
url:

一旦您确认它做了您想要的事情,只需添加
-i
即可 替换到位:

sed -i '/^depends:/,/url:/d' your_file
使用此选项(我已删除了
-I
,您可以在对结果满意时将其添加回):

sed'/^dependens:/{N;N;d}test.yml
详情:

  • /^dependens://
    匹配三行中的第一行
  • {…}
    当上述模式匹配时,将执行命令
  • 分隔连续命令
  • N
    将以下行追加到当前模式空间(匹配发生时您正在编辑的行);这种情况发生两次,导致模式空间中包含与模式匹配的行,以及下面的两行
  • d
    删除图案空间

使用了解YAML的工具,例如:

yq评估'del(.dependens)'infle.yaml

谢谢,你知道当这3行匹配时我如何删除它们吗?