【发布时间】:2020-12-14 06:57:59
【问题描述】:
我正在尝试编辑以下 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这样的YAML解析器你能安装这样的工具吗? -
我宁愿避免这样做。不是要求,但差不多。
-
所以
yq有两个版本可用。一个使用jq,另一个使用适当的 DSL,用 Go 编写。前者-kislyuk.github.io/yq,后者-github.com/mikefarah/yq。取决于你想使用哪一个 -
记住 sed != bash,因此无论您采用哪种方法,自定义标志/正则表达式都可能在一个系统上工作而在另一个系统上失败
-
Just good ol' bash将是一个糟糕的选择。如果您不能使用yq,那么您应该使用可以从外壳调用的标准工具之一,例如awk。