2016-06-16 11 views
0

Json Eingang:Json JQ Filter mit Wildcard in Bash

[ "orange-1234", "orange-12345", "apple-1234" ] 

gewünschte Ausgabe:

[ "orange-1234, "orange-12345" ] 

Via bash, würde Ich mag jq verwenden, um die Werte beginnen oder mit Orange zu finden *

Ich möchte, dass die Ausgabe den vollständigen Wert enthält. Ich habe erkundet mit jq startswith und enthält, war aber nur in der Lage, wahr oder falsch

Antwort

2

Ab jq 1.5, können Sie tun, reguläre Ausdruck übereinstimmen. Filtern Sie also Ihr Array.

map(select(test("\\borange\\b"))) 
+0

jq Karte (wählen (Test ("\\ borange \\ b"))) Ich schlag erhalten: Syntaxfehler in der Nähe von unerwartetem Token '(‘ – jsmickey

+0

_Always_ die setzt Filtern Sie in (einzelnen) Anführungszeichen. Stellen Sie sicher, dass es in der Form ist: 'jq 'map (wählen Sie (test (" \\ borange \\ b ")))'" –

+0

jq -c '. - map (auswählen (test (" \\ orange \\ b ")))" erzeugt das Gegenteil ... ["apple-1234"] – jsmickey

2

startswith und contains können diese ganz gut tun. Verwenden Sie select zu filtern Werte von true/false:

map(select(startswith("orange")))