JSON JQ 查找替换值
JSON JQ Find Replace Value
我正在尝试更新 json 结构中的 "image_id" 值。使用下面的命令,如何将 ami-d8cf5cab
更改为 ami-a4df7gah
到目前为止,我已经尝试过这个
cat cog.test.tfstate | jq -r '.modules[].resources[] | select(.type == "aws_launch_configuration") | select(.primary.attributes.name_prefix == "pmsadmin-lc-")'
JSON数据是
{
"type": "aws_launch_configuration",
"primary": {
"id": "pmsadmin-lc-v47thk6rcrdgza6dujfzjatmju",
"attributes": {
"associate_public_ip_address": "false",
"ebs_block_device.#": "0",
"ebs_optimized": "false",
"enable_monitoring": "true",
"ephemeral_block_device.#": "0",
"iam_instance_profile": "cog-test-pmsadmin",
"id": "pmsadmin-lc-v47thk6rcrdgza6dujfzjatmju",
"image_id": "ami-d8cf5cab",
"instance_type": "t2.small",
"key_name": "cog-test-internal",
"name": "pmsadmin-lc-v47thk6rcrdgza6dujfzjatmju",
"name_prefix": "pmsadmin-lc-",
"root_block_device.#": "0",
"security_groups.#": "4",
"security_groups.1893851868": "sg-7ee7bf1a",
"security_groups.2774384192": "sg-e2e7bf86",
"security_groups.2825850029": "sg-86e6bee2",
"security_groups.3095009517": "sg-f4e7bf90",
"spot_price": "",
"user_data": "ed03ac6642af8c97562b065c0b37f211b58ad0a2"
}
}
}
使用 |=
运算符分配给 属性:
jq -r '.modules[].resources[] | select(.type == "aws_launch_configuration") | select(.primary.attributes.name_prefix == "pmsadmin-lc-")| .primary.attributes.image_id |= "ami-a4df7gah"
我认为这个问题和(迄今为止)唯一的答案远未达到 whosebug.com
社区的质量期望,因此应该关闭。
除此之外,我不得不承认他们确实为我提供了我正在寻找的解决方案。
因此,对于处于相同情况的每个人,这里 以一种实际有效且无需过多水平滚动即可阅读的形式出现:
假设问题的 JSON 片段在 cog.test.tfstate
中:
jq_filter='. | select(.type == "aws_launch_configuration")'
jq_filter+=' | select(.primary.attributes.name_prefix == "pmsadmin-lc-")'
jq_filter+=' | .primary.attributes.image_id |= "ami-a4df7gah"'
jq "${jq_filter}" cog.test.tfstate
所使用的样本数据对发现实际变化没有帮助,所以这里有一个之前/之后的差异:
diff cog.test.tfstate <(jq "${jq_filter}" cog.test.tfstate)
13c13
< "image_id": "ami-d8cf5cab",
---
> "image_id": "ami-a4df7gah",
我正在尝试更新 json 结构中的 "image_id" 值。使用下面的命令,如何将 ami-d8cf5cab
更改为 ami-a4df7gah
到目前为止,我已经尝试过这个
cat cog.test.tfstate | jq -r '.modules[].resources[] | select(.type == "aws_launch_configuration") | select(.primary.attributes.name_prefix == "pmsadmin-lc-")'
JSON数据是
{
"type": "aws_launch_configuration",
"primary": {
"id": "pmsadmin-lc-v47thk6rcrdgza6dujfzjatmju",
"attributes": {
"associate_public_ip_address": "false",
"ebs_block_device.#": "0",
"ebs_optimized": "false",
"enable_monitoring": "true",
"ephemeral_block_device.#": "0",
"iam_instance_profile": "cog-test-pmsadmin",
"id": "pmsadmin-lc-v47thk6rcrdgza6dujfzjatmju",
"image_id": "ami-d8cf5cab",
"instance_type": "t2.small",
"key_name": "cog-test-internal",
"name": "pmsadmin-lc-v47thk6rcrdgza6dujfzjatmju",
"name_prefix": "pmsadmin-lc-",
"root_block_device.#": "0",
"security_groups.#": "4",
"security_groups.1893851868": "sg-7ee7bf1a",
"security_groups.2774384192": "sg-e2e7bf86",
"security_groups.2825850029": "sg-86e6bee2",
"security_groups.3095009517": "sg-f4e7bf90",
"spot_price": "",
"user_data": "ed03ac6642af8c97562b065c0b37f211b58ad0a2"
}
}
}
使用 |=
运算符分配给 属性:
jq -r '.modules[].resources[] | select(.type == "aws_launch_configuration") | select(.primary.attributes.name_prefix == "pmsadmin-lc-")| .primary.attributes.image_id |= "ami-a4df7gah"
我认为这个问题和(迄今为止)唯一的答案远未达到 whosebug.com
社区的质量期望,因此应该关闭。
除此之外,我不得不承认他们确实为我提供了我正在寻找的解决方案。
因此,对于处于相同情况的每个人,这里
假设问题的 JSON 片段在 cog.test.tfstate
中:
jq_filter='. | select(.type == "aws_launch_configuration")'
jq_filter+=' | select(.primary.attributes.name_prefix == "pmsadmin-lc-")'
jq_filter+=' | .primary.attributes.image_id |= "ami-a4df7gah"'
jq "${jq_filter}" cog.test.tfstate
所使用的样本数据对发现实际变化没有帮助,所以这里有一个之前/之后的差异:
diff cog.test.tfstate <(jq "${jq_filter}" cog.test.tfstate)
13c13
< "image_id": "ami-d8cf5cab",
---
> "image_id": "ami-a4df7gah",