首页 > 解决方案 > 从 bash 中的 yaml 数组中获取值

问题描述

是否有一种“简单”的方式(没有函数或包)来获取终端(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

标签: bashshellyaml

解决方案


这不适用于所有系统,但是

sed -n '/name: "kube-admin-local"/,/name:/s/.*client-certificate-data: \(.*\)/\1/p'

应该这样做。

  • -n: 除非明确说明,否则不要打印
  • /name: "kube-admin-local"/,/name:/: 这些匹配之间的行
  • rest :替换数据并打印

推荐阅读