如何使用sed通过变量向yaml文件postgresql节点下新增字段并解决报错
错误原因
你之前的命令报错主要有两个问题:
- 你在双引号内对
${versionentry}的$加了反斜杠转义,导致shell无法正常展开变量,sed会将${versionentry}识别为字面量而非变量值;同时你没有给新增的配置项加缩进,即使执行成功也会破坏YAML的层级结构。 - 你使用
/作为seds命令的分隔符,若后续变量值中出现/字符就会和分隔符冲突,触发unknown option to s报错。
正确命令
先定义好你的变量:
connector="postgresql" versionentry="version: 13.01"
执行以下sed命令即可完成修改:
sed -r "s|^(\s*${connector}\s*:\s*).*|&\n ${versionentry}|" -i dsn-details.yaml
这里做了两处调整:
- 将sed
s命令的分隔符换成了|,避免和变量中可能出现的/冲突 - 去掉了变量前的转义符,让shell正常展开变量,同时在变量前加了2个空格,保证YAML的缩进层级正确。
内容的提问来源于stack exchange,提问作者COBHC
相关产品推荐
相关产品推荐

