python - 使用 Bash 编辑 YAML 文件
问题描述
我正在尝试编辑以下 YAML 文件
db:
host: 'x.x.x.x.x'
main:
password: 'password_main'
admin:
password: 'password_admin'
要编辑该host
部分,我可以使用它
sed -i "/^\([[:space:]]*host: \).*/s//\1'$DNS_ENDPOINT'/" config.yml
但我找不到更新main
和admin
(它们是不同的值)的密码的方法。
我试着玩弄\n
并[[:space:]]
得到了不同的口味:
sed -i "/^\([[:space:]]*main:\n*[[:space:]]*password: \).*/s//\1'$DNS_ENDPOINT'/" config.yml
但从来没有让它工作。非常感谢任何帮助!
编辑- 要求:没有外部二进制文件/工具。只是很好的狂欢。
解决方案
由于您不想安装yq
,因此可以使用您很可能已经安装的python 。
以下是基本原理:
#!/usr/bin/python
import yaml
with open("file.yml") as f:
y=yaml.safe_load(f)
y['db']['admin']['password'] = 'new_admin_pass'
print(yaml.dump(y, default_flow_style=False, sort_keys=False))
输出:
db:
host: x.x.x.x.x
main:
password: password_main
admin:
password: new_admin_pass
一段类似的python代码作为单行代码,您可以放入bash脚本中,看起来像这样(并产生相同的输出):
python -c 'import yaml;f=open("file.yml");y=yaml.safe_load(f);y["db"]["admin"]["password"] = "new_admin_pass"; print(yaml.dump(y, default_flow_style=False, sort_keys=False))'
推荐阅读
- sql - 如何在不应用透视功能的情况下为不同字段创建列
- javascript - 使用 Underscore.js 过滤列
- javascript - html按钮在移动设备中不起作用
- spring-mvc - 多个 ContextLoader* 定义
- ruby - ActiveRecord 根据不存在的孩子找到父母
- reactjs - 是否可以使用 axios 的前端反应和球衣的后端 java 动态网络?
- javascript - 在 React-Native 中检测和处理慢速互联网连接
- docker - 詹金斯管道内的泊坞窗错误
- jquery - JQuery-Ajax 第二个函数在第一个函数之前执行
- sql - 如何在 SQL Server 的窗口函数中使用日期范围