如何用jq根据属性值过滤对象并拼接属性内容?
解决方案
你可以用 select() 结合正则匹配函数 test() 完成筛选,以下是完整的jq命令:
.[] | select(.name | test(/^env\./)) | "\(.name)=\"\(.value)\""
分步说明:
.[]:把输入的数组展开为单个对象,方便逐个处理select(.name | test(/^env\./)):筛选出name属性值匹配正则^env\.的对象。这里用原生正则表达式/^env\./比字符串形式更简洁,无需额外转义反斜杠;如果用字符串写法要写成"^env\\.""\(.name)=\"\(.value)\"":按需求拼接成指定格式,给value加上双引号,和目标输出一致
测试示例:
先修正原JSON的语法错误(补全对象间的逗号),保存为data.json:
[ { "name":"Genus", "value": "canis" }, { "name":"env.VAR1", "value": "dogsdrool" }, { "name":"env.VAR2", "value": "catsrule" } ]
执行命令:
jq -r '.[] | select(.name | test(/^env\./)) | "\(.name)=\"\(.value)\""' data.json
输出结果:
env.VAR1="dogsdrool" env.VAR2="catsrule"
内容的提问来源于stack exchange,提问作者Ross Presser
相关产品推荐
相关产品推荐

