我有两个问题:
如何使用jq搜索以下划线开头的“名称”字段(如_RDS_PASSWORD
)并删除前导下划线(因此它变为RDS_PASSWORD
)
如何将jq用于以下划线开头的“name”字段(如_RDS_PASSWORD
),并传递值cGFzc3dvcmQK
的值以通过base64解码? (例如:“cGFzc3dvcmQK”| base64 --decode)
输入:
[
{
"name": "RDS_DB_NAME",
"value": "rds_db_name"
},
{
"name": "RDS_HOSTNAME",
"value": "rds_hostname"
},
{
"name": "RDS_PORT",
"value": "1234"
},
{
"name": "RDS_USERNAME",
"value": "rds_username"
},
{
"name": "_RDS_PASSWORD",
"value": "cGFzc3dvcmQK"
}
]
期望的输出:
[
{
"name": "RDS_DB_NAME",
"value": "rds_db_name"
},
{
"name": "RDS_HOSTNAME",
"value": "rds_hostname"
},
{
"name": "RDS_PORT",
"value": "1234"
},
{
"name": "RDS_USERNAME",
"value": "rds_username"
},
{
"name": "RDS_PASSWORD",
"value": "password"
}
]
答案 0 :(得分:0)
walk( if type=="object" and has("name") and .name[0:1] == "_"
then .name |= .[1:]
else .
end)
如果你的jq没有walk/1
,那么你可以升级到更新版本的jq而不是1.5,或者包含def
,可以在https://github.com/stedolan/jq/blob/master/src/builtin.jq找到} p>
.. | objects | select(has("name") and .name[0:1] == "_") | .value
如果您确定编码的字符串是UTF-8字符串,则可以使用jq的@ base64d;否则,使用-r选项调用jq,并按照您的计划将结果传送给解码器。