从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 都不能保证键和 nameuser 在连续的行上(因为它恰好在示例中),它们可以在同一行上,有注释或空行之间,所有这些都不会改变 YAML 文件的语义。所以这个“解决方案”一眨眼就破了。 哇,太好了! sed 对我来说完全没问题。我不清楚我的要求。几乎每个系统都已经安装了sed。我的目标是防止安装新的东西。谢谢

以上是关于从bash中的yaml数组获取值[重复]的主要内容,如果未能解决你的问题,请参考以下文章

获取 bash 命令的输出并将其放入 yaml 中的消息中以进行 GitHub 操作?

通过bash中的值访问数组的索引[重复]

如何从 Gatsby.js 中的 YAML 数组中获取图像

给定一个只包含正整数的非空数组,返回该数组中重复次数最多的前N个数字 ,返回的结果按重复次数从多到少降序排列(N不存在取值非法的情况)

pytest + yaml 框架 - 1.我们发布上线了!

bash中的关联数组不在循环内存储值[重复]