jq:出力から「null」を置き換える方法は?[複製]

Aug 24 2020

私は次のJSONを持っています:

{
    "SecurityGroups": [
        {
            "Description": "launch-wizard-6 created 2018-10-25T13:59:20.092+03:00",
            "GroupName": "launch-wizard-6",
            "IpPermissions": [
                {
                    "IpProtocol": "-1",
                    "IpRanges": [
                        {
                            "CidrIp": "0.0.0.0/0"
                        }
                    ],
                    "Ipv6Ranges": [],
                    "PrefixListIds": [],
                    "UserIdGroupPairs": []
                },
                {
                    "FromPort": 22,
                    "IpProtocol": "tcp",
                    "IpRanges": [
                        {
                            "CidrIp": "0.0.0.0/0"
                        }
                    ],
                    "Ipv6Ranges": [],
                    "PrefixListIds": [],
                    "ToPort": 22,
                    "UserIdGroupPairs": []
                }
            ],
            "OwnerId": "XXXXXXXXXXXX",
            "GroupId": "sg-054368f50a6b4fea4",
            "IpPermissionsEgress": [
                {
                    "IpProtocol": "-1",
                    "IpRanges": [
                        {
                            "CidrIp": "0.0.0.0/0"
                        }
                    ],
                    "Ipv6Ranges": [
                        {
                            "CidrIpv6": "::/0"
                        }
                    ],
                    "PrefixListIds": [],
                    "UserIdGroupPairs": []
                }
            ],
            "VpcId": "vpc-6ea82a08"
        }
    ]
}

次のjqコマンドを実行すると:

aws ec2 describe-security-groups --group-id ${group_id} --profile ${profile} --region ${region} --output json | jq -r '.SecurityGroups[].IpPermissions[] | [ (.FromPort|tostring), .IpProtocol, .IpRanges[].CidrIp // .UserIdGroupPairs[].GroupId // "" ] | @tsv'

次の出力が得られます。

null    -1  0.0.0.0/0
22  tcp 0.0.0.0/0

出力からnullを削除したいのですが、どうすればよいですか?

回答

1 0stone0 Aug 24 2020 at 21:42

キーのフォールバックを追加し.FromPortます。

.FromPort // ""

したがって、コマンドは次のようになります。

.SecurityGroups[].IpPermissions[] | [ (.FromPort // "" ?), .IpProtocol, .IpRanges[].CidrIp ] | @tsv

に降伏する

    -1  0.0.0.0/0
22  tcp 0.0.0.0/0

オンラインでお試しください!