如何使用sed修改yaml配置 开启第一个file-store的enabled参数
原命令失效原因
你的正则匹配规则没有命中目标块起始行:file-store字段前有- 前缀,而你写的正则/^ *file-store:/只匹配行首任意空格后直接跟file-store:的行,匹配失败后自然不会触发后续替换逻辑。
可用sed命令
匹配你的文件结构,使用以下命令即可实现需求:
# Linux 环境使用 sed -i '/^ *- *file-store:/,/^ *[^:]*:/s/enabled: no/enabled: yes/' file.yaml # MacOS 环境使用(sed 的 -i 参数需要额外指定空后缀) sed -i '' '/^ *- *file-store:/,/^ *[^:]*:/s/enabled: no/enabled: yes/' file.yaml
命令逻辑说明
- 范围匹配段
/^ *- *file-store:/,/^ *[^:]*:/:匹配从「行首任意空格后接-、任意空格、再跟file-store:」的行开始,到下一个「行首任意空格后不含冒号的行」结束的完整块,刚好覆盖第一个file-store的所有配置项 - 替换段
s/enabled: no/enabled: yes/:在上述匹配到的块范围内,将enabled: no替换为enabled: yes
补充提示
如果有频繁操作YAML文件的需求,更推荐使用专门的YAML处理工具yq,不会因为格式、缩进变动导致匹配失效,对应实现命令为:
yq -i '(.[] | select(has("file-store")).file-store.enabled) = true' file.yaml
内容的提问来源于stack exchange,提问作者Kalib Zen
相关产品推荐
相关产品推荐

