【问题标题】:How to grep a yaml value如何grep一个yaml值
【发布时间】:2018-10-22 20:25:25
【问题描述】:

我尝试从 shell 中的 YAML 文件中获取值:

apiVersion: v1
items:
- apiVersion: v1
  kind: Pod
  spec:
    containers:
    hostIP: 12.198.110.192
    phase: Running
    podIP: 10.244.1.9

kubectl get pods -l run=hello-kube -o yaml | grep podIP: 我得到这个输出:

    podIP: 10.244.1.9

我的目标是将该值保存在环境变量中,但我只得到key/value-pair:

export PODIP=$(kubectl get pods -l run=hello-kube -o yaml | grep podIP)

【问题讨论】:

    标签: shell grep kubernetes yaml


    【解决方案1】:

    使用 awk:

    kubectl get pods -l run=hello-kube -o yaml | awk '/podIP:/ {print $2}'
    

    输出:

    10.244.1.9

    【讨论】:

    • 或使用 GNU grep:| grep -Po 'podIP: \K.*'
    • 或者如果第 1 列包含 podIP: 打印第 2 列:| awk '$1=="podIP:" {print $2}'
    【解决方案2】:

    您也可以使用 json 格式通过 jsonpath 获取值,例如,

    kubectl get pods -l app=cron -o=jsonpath='{.items[0].status.podIP}'
    

    谢谢

    【讨论】:

      【解决方案3】:

      您也可以使用yqhttps://github.com/mikefarah/yq),这是一个类似于jq的工具。

      然后做:

      % yq read file.yaml items.0.spec.podIP
      10.244.1.9
      

      【讨论】:

      • 我建议this yq version。 (pip install -user yq)。语法与jq完全相同
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-05-14
      • 1970-01-01
      • 2011-11-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多