J'ai ce json et je veux obtenir l'id du sous-réseau correspondant qui correspond au sous-réseau variable.
subnet="192.168.112"
json='{
"subnets": [
{
"cidr": "192.168.112.0/24",
"id": "123"
},
{
"cidr": "10.120.47.0/24",
"id": "456"
}
]
}'
Depuis regex n'est pas pris en charge avec jq. Le seul moyen que j'ai trouvé pour obtenir le bon identifiant est de mélanger grep, sed et jq comme ceci:
tabNum=$((`echo ${json} | jq ".subnets[].cidr" | grep -n "$subnet" | sed "s/^\([0-9]\+\):.*$/\1/"` - 1))
NET_ID=`echo ${json} | jq -r ".subnets[${tabNum}].id"`
Existe-t-il un moyen d'obtenir l'ID uniquement en utilisant jq?
Pour moi, ce que fait votre script fourni n'est pas complètement clair, mais il semble qu'il ne recherche qu'une chaîne contenant le sous-ensemble fourni. Je suggère d'utiliser contains
ou startswith
. Un exemple de script ressemblerait à ceci:
echo "${json}" | jq --arg subnet "$subnet" '.subnets[] | select(.cidr | startswith($subnet)).id'
Puisque vous mentionnez regex: la dernière version de jq, 1.5, inclut la prise en charge de regex (merci à Jeff Mercado de l'avoir signalé!) Et, si vous devez traiter fréquemment des problèmes de manipulation de chaînes, je vous recommande de le vérifier.