shell 使用Bash脚本从Yaml文件中提取值

62o28rlo  于 2023-03-09  发布在  Shell
关注(0)|答案(2)|浏览(286)

我有yaml文件,它位于不同的目录。Chart.yaml:

apiversion:v2
name: microservicename
version: 1.0.0
appVersion: "1.2.1"

我想提取值并保存在变量中。变量中的输出应为:1.2.1
您能建议我如何在这个场景中使用grep、awk和sed吗?
我试过使用yq,它不工作。
安装yq,neit
变量中的预期输出=1.2.1

0kjbasz6

0kjbasz61#

有效的YAML键和值由冒号和空格分隔。您提供的示例在第一行的冒号之间没有空格。
这是有效的:

apiVersion: v2
name: microservicename
version: 1.0.0
appVersion: "1.2.1"

然后可以使用yq(https://github.com/mikefarah/yq):

yq e '.appVersion' <path_to_your_yaml_file>

如果您使用https://pypi.org/project/yq/中的yq,则应该可以做到这一点:

yq .appVersion <path_to_your_yaml_file>
crcmnpdw

crcmnpdw2#

GNU AWK

awk -F'"' '/appVersion/{print $2}' /path/to/Chart.yaml
  1. -F'"'使用"作为分隔符
  2. /appVersion/查找“appVersion”行
  3. print $2打印第二个字段
awk '/appVersion/{gsub(/"/,""); print $2}' /path/to/Chart.yaml

1.使用默认分隔符blank

  1. /appVersion/查找“appVersion”行
  2. gsub(/"/,"")删除所有"
  3. print $2打印第二个字段
$ myvar=$(awk -F'"' '/appVersion/{print $2}' /path/to/Chart.yaml) 
$ echo $myvar
1.2.1
$ myvar=$(awk '/appVersion/{gsub(/"/,""); print $2}' /path/to/Chart.yaml)
$ echo $myvar
1.2.1

相关问题