json
  • regex
  • bash
  • jq
  • 2015-07-15 6 views 13 likes 
    13

    Ich habe dieses JSON und ich möchte die ID des entsprechenden Subnetzes, die das variable Subnetz passen.regex-like Suche in einem JSON mit jq

    subnet="192.168.112" 
    json='{ 
        "subnets": [ 
        { 
         "cidr": "192.168.112.0/24", 
         "id": "123" 
        }, 
        { 
         "cidr": "10.120.47.0/24", 
         "id": "456" 
        } 
        ] 
    }' 
    

    Da Regex nicht mit jq unterstützt wird. Der einzige Weg, ich die richtige ID bekommen zu finden ist mixte grep, sed und jq wie folgt aus:

    tabNum=$((`echo ${json} | jq ".subnets[].cidr" | grep -n "$subnet" | sed "s/^\([0-9]\+\):.*$/\1/"` - 1)) 
    NET_ID=`echo ${json} | jq -r ".subnets[${tabNum}].id"` 
    

    Gibt es eine Möglichkeit, die ID zu bekommen nur jq mit?

    +1

    Regulärer Ausdruck wird in jq 1.5 unterstützt. Überlegen Sie, das zu verwenden –

    Antwort

    21

    Es ist mir nicht völlig klar, was das bereitgestellte Skript tut, aber es sieht so aus, als ob es nur nach einer Zeichenfolge sucht, die die bereitgestellte Teilmenge enthält. Ich würde vorschlagen, contains oder startswith zu verwenden. Ein Beispielskript würde wie folgt aussehen:

    echo "${json}" | jq --arg subnet "$subnet" '.subnets[] | select(.cidr | startswith($subnet)).id' 
    

    Da Sie regex erwähnen: die neueste Version von jq, 1.5, regex Unterstützung umfasst und, wenn Sie mit einer Schnur zu tun haben (dank Jeff Mercado für den Hinweis!) Manipulationsprobleme häufig, ich würde empfehlen, es auszuprobieren.

    Verwandte Themen