使用 jq 打印数组的 json 对象的特定元素

Print specific element of json object of an array using jq

我正在描述一个 AWS 安全组并通过 jq 传递输出以获取入站规则的所有 CIDR。

到目前为止我已经达到:

▶ aws ec2 describe-security-groups --group-ids sg-123456789 | jq '.SecurityGroups[0].IpPermissions[0].IpRanges'
[
  {
    "CidrIp": "11.22.33.44/32",
    "Description": "Something"
  },
  {
    "CidrIp": "22.33.44.12/32",
    "Description": "Something else"
  },
  {
    "CidrIp": "22.11.33.55/32",
    "Description": "Something different"
  },
]

我知道我可以 grep 但是有没有办法只从这个数组的每个 json 元素中获取 CidrIp

当然可以,将管道更改为

jq -r '.SecurityGroups[0].IpPermissions[0].IpRanges[].CidrIp'

Demo

请注意,我还添加了 -r 标志,它使输出原始文本而不是 JSON。

jq '.SecurityGroups[0].IpPermissions[0].IpRanges | values[].CidrIp'

这似乎也有效。