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

How to get a value in a file with Bash

我正在尝试从 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=
TOKEN_NAME=

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

echo $KUBE_GET

试试这个:

NAMESPACE=""
TOKEN_NAME=""

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

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

解释:

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

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

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

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

我建议使用 yq. Please check its document 了解安装细节。
安装 yq 后,您可以在命令行中输入以下命令:

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

如果有效,请将其放入 bash 文件。

使用awk在匹配TOKEN_NAME

的行中挑出字段2
 kubectl get secrets $TOKEN_NAME -n $NAMESPACE -o yaml | awk -vns=$TOKEN_NAME ' ~ ns {print }'

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