Ich habe eine Gruppe von AWS-Instanzen, die ich über aws ec describe-instances analysiere. Ich versuche, alle Datensätze zu entfernen, deren IPs nicht mit '10 .10 'beginnen.JQ Wählen Sie Elemente, die nicht mit der Zeichenfolge übereinstimmen
aws ec2 describe-instances --no-paginate --filter "Name=instance-state-name,Values=running" --query 'Reservations[].Instances[].{Private:PrivateIpAddress,PublicDNS:PublicDnsName,PublicIP:PublicIpAddress}' | jq '.[] | select(.Private | contains("10.10"))'
Das bringt mir das genaue Gegenteil von dem, was ich will. Es erscheint logisch, dass ich in der Lage sein sollte, die Inhalte irgendwie zu negieren - aber ich konnte es weder aus der Dokumentation noch durch Experimente herausfinden. Mein jq-Können ist mittelmäßig, vielleicht benutze ich hier den falschen Operator oder die falsche Funktion.
Während ich möchte eine Antwort auf diese spezifische JQ Frage - ich werde eine Antwort akzeptieren, die JMESPath durch die - Abfrage-Schalter verwendet, um das gleiche Ergebnis zu erzielen.
Fügen Sie einfach ein 'not' zum Ende des Select-Prädikats hinzu. –
Sorry, ich bin mir nicht sicher, wie die Syntax aussehen sollte. Könnten Sie das näher ausführen? Ich habe versucht, "nicht" an ein paar verschiedenen Orten hinzuzufügen, aber ich bekomme immer jq Kompilierfehler. –
'select (.Private | contains (" 10.10 ") | not)' Wahrscheinlich solltest du ['startswith/1'] (https://stedolan.github.io/jq/manual/#startswith (str)) als verwenden naja da willst du das eigentlich nicht am anfang der string. –