You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在Bash/Shell终端无需函数或包提取YAML指定值的方法

当然有!在Bash/Shell终端里,咱们可以用系统自带的awk或者sed这类工具来搞定,完全不需要额外安装软件包或者写复杂函数。针对你要提取的users下name为kube-admin-local的user节点中client-certificate-data的值,我给你两个实用的方案:

方案1:使用awk

这个方法通过标记目标用户的区间来精准提取值,命令如下:

awk '/name: "kube-admin-local"/{flag=1; next} /client-certificate-data:/{if(flag) print $2; flag=0}' your-file.yaml

逻辑说明:

  • 当匹配到name: "kube-admin-local"这一行时,设置标记flag=1,并跳过当前行继续往下找
  • 当后续匹配到client-certificate-data:这一行时,如果flag为1(说明是目标用户的字段),就打印该行的第二个字段(也就是对应的值)
  • 打印完成后把flag重置为0,避免误匹配到其他用户的同名字段
方案2:使用sed

这个方法通过选中目标用户的行区间来提取值,命令如下:

sed -n '/name: "kube-admin-local"/,/client-certificate-data:/{/client-certificate-data:/s/.*: //p}' your-file.yaml

逻辑说明:

  • -n参数让sed只打印我们指定的内容,避免输出无关行
  • /name: "kube-admin-local"/,/client-certificate-data:/ 定义了一个行区间:从匹配目标name的行开始,到匹配client-certificate-data:的行结束
  • 在这个区间内,找到client-certificate-data:的行,用s/.*: //p把该行中:及前面的所有内容替换为空,只保留后面的值并打印

注意事项:

这两个方法都是基于文本匹配的,所以需要确保你的YAML格式和示例一致(比如字段的缩进、引号使用)。如果YAML结构有调整,可能需要微调正则表达式,但对于你给出的场景完全适用。

内容的提问来源于stack exchange,提问作者Jan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.12 04:37:57