如何使用Bash在文件中获取值

时间:2020-04-06 11:08:40

标签: bash shell yq

我正在尝试从bash脚本读取yaml文件中的值

这是我的Yaml的样子

apiVersion: v1
data:
  consul-write: 100
kind: Secret

我需要获取consul-write的值。 (在这种情况下为100

如何使用bash

获得该值

此命令输出上述yaml

kubectl get secrets consul-write -n test -o yaml

这是我尝试过的。有人可以帮我吗?

NAMESPACE=$1
TOKEN_NAME=$2

KUBE_GET=$(kubectl get secrets $TOKEN_NAME -n $NAMESPACE -o yaml)

echo $KUBE_GET

3 个答案:

答案 0 :(得分:1)

使用awk在匹配TOKEN_NAME的行上选择字段2

 kubectl get secrets $TOKEN_NAME -n $NAMESPACE -o yaml | awk -vns=$TOKEN_NAME '$1 ~ ns {print $2}'

编辑:固定变量和多行输出。

答案 1 :(得分:0)

尝试一下:

NAMESPACE="$1"
TOKEN_NAME="$2"

KUBE_GET=$(kubectl get secrets "$TOKEN_NAME" -n "$NAMESPACE" -o yaml)

grep "$TOKEN_NAME" <<< "$KUBE_GET" | sed 's/.*: \(.*\)$/\1/'

说明:

这将找到包含给定令牌名称的第一行:

grep "$TOKEN_NAME" <<< "$KUBE_GET"

这将在grep找到的行中找到字符串“:”,然后返回该字符串之后的其余行:

sed 's/.*: \(.*\)$/\1/'

答案 2 :(得分:0)

我建议使用yq。请检查其document以获得安装详细信息。
安装yq之后,可以在命令行中输入以下命令:

# yq r your_yaml_file 'data."consul-write"'

如果有效,将其放在bash文件中。