从 yaml 文件中删除匹配的行

时间:2021-05-28 12:31:48

标签: 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_version: "~> 4"
supports:
- platform: aws

名称和网址值可以是随机的,但始终为 depends: name, url

我在第一行用 sed 尝试了这个,但没有用:

 sed -i '^depends:' test.yml   

4 个答案:

答案 0 :(得分:2)

使用这个(我已经删除了 Option Explicit Sub Clean1() Dim ws As Worksheet Set ws = ThisWorkbook.Worksheets(1) ws.Range("D1:D2").Formula = "=CLEAN(RC[-3])" ws.Range("E1:E2").Formula = "=CLEAN(RC[-3])" ws.Range("D1:E2").Copy ws.Range("A1:B2").PasteSpecial Paste:=xlPasteValues ws.Range("D:E").Delete Shift:=xlToLeft Set ws = Nothing End Sub ,当你对结果满意时可以重新添加它):

-i

详情:

  • sed '/^depends:/{N;N;d}' test.yml 匹配三行中的第一行
  • /^depends:/ 将上述模式匹配时要执行的命令组合起来
  • {…} 分隔连续的命令
  • ; 将以下行附加到当前模式空间(匹配发生时您正在编辑的行);这发生了两次,导致模式空间保存与模式匹配的行,加上以下两行
  • N 删除模式空间

答案 1 :(得分:1)

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

答案 2 :(得分:1)

这样做:

sed '/^depends:/,/url:/d' your_file

它删除所有出现的行以及与两个模式匹配的行之间的行 ^depends:url:

一旦你确认它做了你想要的,只需添加 -i 来做 就地替换:

sed -i '/^depends:/,/url:/d' your_file

答案 3 :(得分:1)

使用理解 YAML 的工具,例如 yq

yq eval 'del(.depends)' infile.yaml