このjsonがあり、変数サブネットに適合する対応するサブネットのIDを取得したいです。
subnet="192.168.112"
json='{
"subnets": [
{
"cidr": "192.168.112.0/24",
"id": "123"
},
{
"cidr": "10.120.47.0/24",
"id": "456"
}
]
}'
正規表現はjqではサポートされていないため。私が正しいIDを取得する唯一の方法は、次のようにgrep、sed、jqを混在させることです:
tabNum=$((`echo ${json} | jq ".subnets[].cidr" | grep -n "$subnet" | sed "s/^\([0-9]\+\):.*$/\1/"` - 1))
NET_ID=`echo ${json} | jq -r ".subnets[${tabNum}].id"`
Jqのみを使用してidを取得する方法はありますか?
提供されたスクリプトが何をするのかは完全にはわかりませんが、提供されたサブセットを含む文字列のみを検索するようです。 contains
または startswith
を使用することをお勧めします。サンプルスクリプトは次のようになります。
echo "${json}" | jq --arg subnet "$subnet" '.subnets[] | select(.cidr | startswith($subnet)).id'
あなたは正規表現に言及しているので、jqの最新リリース1.5には正規表現のサポートが含まれています(これを指摘してくれたJeff Mercadoに感謝します!)、文字列操作の問題に頻繁に対処する必要がある場合は、チェックアウトすることをお勧めします。