从bash中的yaml数组获取值[重复]
Posted
技术标签:
【中文标题】从bash中的yaml数组获取值[重复]【英文标题】:Get value from yaml array in bash [duplicate] 【发布时间】:2019-08-21 04:47:14 【问题描述】:是否有一种“简单”的方式(没有函数或包)在终端 (bash/sh) 中获取 YAML 文件的值?
我想提取 users 的值 -> user("kube-admin-local") -> client-certificate-data
这是 YAML 示例:
users:
- name: "kube-admin-local"
user:
client-certificate-data: 0FURS0tLS0tCk1JSUM2VENDQWRHZ0F3SUJBZ0lJT2wyZ0NHL1BnTWd3RFFZSktvWklodmNOQVFFTEJRQ
- name: kube-admin
user:
client-certificate-data: LS0tLS1CRUd=0FURS0tLS0tCk1JSUM2VENDQWRHZ0F3SUJBZ0lJT2wyZ0NHL1BnTWd3RFFZSktvWklodmNOQVFFTEJ
【问题讨论】:
您需要在 bash 中编写一个 YAML 解析器才能正确执行此操作,我怀疑这在没有函数的情况下是可行的。所有合适的解决方案都使用成熟的 YAML 解析器,这是一个简单的解决方案,因为您不必担心 YAML 中的格式更改,或添加的 cmets、以流样式重写(部分)文件等。 【参考方案1】:这不适用于所有系统,但是
sed -n '/name: "kube-admin-local"/,/name:/s/.*client-certificate-data: \(.*\)/\1/p'
应该这样做。
-n
:除非明确说明,否则不要打印
/name: "kube-admin-local"/,/name:/
: 这些匹配之间的线
rest : 替换数据并打印
【讨论】:
我认为你应该假设“没有函数或包”也假设没有 bash 外部的程序。在任何情况下,YAML 都不能保证键和name
和 user
在连续的行上(因为它恰好在示例中),它们可以在同一行上,有注释或空行之间,所有这些都不会改变 YAML 文件的语义。所以这个“解决方案”一眨眼就破了。
哇,太好了! sed
对我来说完全没问题。我不清楚我的要求。几乎每个系统都已经安装了sed
。我的目标是防止安装新的东西。谢谢以上是关于从bash中的yaml数组获取值[重复]的主要内容,如果未能解决你的问题,请参考以下文章
获取 bash 命令的输出并将其放入 yaml 中的消息中以进行 GitHub 操作?
给定一个只包含正整数的非空数组,返回该数组中重复次数最多的前N个数字 ,返回的结果按重复次数从多到少降序排列(N不存在取值非法的情况)