在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
相关产品推荐
相关产品推荐

