如何用Shell脚本删除YAML文件中的指定booking块?
删除YAML文件中的指定嵌套块(booking块)
推荐方法:使用专门的YAML处理工具yq
YAML是依赖层级缩进的结构化格式,用通用文本工具(如sed/awk)处理容易因缩进变化、结构调整出错,yq是专门针对YAML的命令行工具,能精准操作节点:
假设你的输入文件名为input.yaml,执行以下命令即可删除testing下的booking块:
yq eval 'del(.testing.booking)' input.yaml > output.yaml
执行后output.yaml的内容即为你期望的结果:
testing: working: - aaa: daa - bbb: rrr maintaining: - eee: dhhaa - fff: ffdaa
备选:用sed实现(仅适用于固定缩进结构)
如果暂时无法安装yq,可利用sed匹配固定缩进的块。观察原YAML,booking块起始行是缩进4个空格的booking:,后续内容都是更深的缩进,直到下一个同级缩进(4个空格)的maintaining:。执行以下命令:
sed '/^ booking:/,/^ [a-z]/d' input.yaml
注意:这种方法完全依赖固定的缩进格式,若YAML的缩进规则改变(比如用tab代替空格、缩进数量调整),命令会失效,仅适合临时应急场景。
内容的提问来源于stack exchange,提问作者sachin bm
相关产品推荐
相关产品推荐

