如何修改jq命令,为image-name和image-tag字段添加对应前缀?
问题:自定义jq解析输出的前缀区分image-name和image-tag
现有如下JSON文件image-data.json:
{ "appsol": { "test": { "repository": "https://github.com/App/test.git", "test-broker": { "commit": "", "image-tag": "master-v2", "image-name": "test-broker", "image-repository": "us.gcr.io", "image-namespace": "ap-cloud" }, "test-service-provider": { "commit": "", "image-tag": "master-v2", "image-name": "test-service-provider", "image-repository": "us.gcr.io", "image-namespace": "ap-cloud" } } } }
当前使用以下jq命令解析时,会给所有输出统一添加_IMAGE 前缀:
jq -r --arg prefix "_IMAGE " ' $prefix + (.. | objects | select(has("image-name")) | (."image-name", ."image-tag")) ' image-data.json
输出结果为:
_IMAGE test-broker _IMAGE master-v2 _IMAGE test-service-provider _IMAGE master-v2
需要修改jq命令,让image-name对应前缀_IMAGE ,image-tag对应前缀_VERSION ,期望输出:
_IMAGE test-broker _VERSION master-v2 _IMAGE test-service-provider _VERSION master-v2
解决方案
修改后的jq命令如下:
jq -r ' .. | objects | select(has("image-name")) | ("_IMAGE " + ."image-name"), ("_VERSION " + ."image-tag") ' image-data.json
逻辑说明:
- 保留原有筛选逻辑:递归遍历所有对象,筛选出包含
image-name的对象 - 针对每个筛选出的对象,分别处理两个字段:
- 对
image-name字段,拼接前缀_IMAGE后输出 - 对
image-tag字段,拼接前缀_VERSION后输出
- 对
- 用逗号分隔两个输出项,确保每个对象会按顺序输出两行对应内容
内容的提问来源于stack exchange,提问作者kr_devops
相关产品推荐
相关产品推荐

