2017-12-15 3 views
1

So habe ich diese json-Datei, die eine Ausgabe von einem frühen Befehl ist:Wie dieser speziellen Text/json extrahieren * nur * grep

{ 
    "upload": { 
     "status": "INITIALIZED", 
     "contentType": "application/octet-stream", 
     "name": "mobile.apk", 
     "created": 1511111178.799, 
     "url": "https://amazonaws.com/arn%358%3Aproject%3A0030e-0a929/uploads/arn%3Aaws%3??/33bgb", 
     "type": "ANDROID_APP", 
     "arn": "arn:aws:devicefarm:us-west-2:588:upload:0000-aaa-bg01-11ab11/1feebbb-1a1a" 
    } 
} 

Ich mag den „arn“ Wert extrahieren, die Anführungszeichen einschließlich , so der Wert:

"arn:aws:devicefarm:us-west-2:588:upload:0000-aaa-bg01-11ab11/1feebbb-1a1a" 

Sollte zurückgegeben werden. Ich brauche auch einen separaten Befehl auch die URL-Wert zu extrahieren, so dass die folgenden Anforderungen zurückgegeben werden:

"https://amazonaws.com/arn%358%3Aproject%3A0030e-0a929/uploads/arn%3Aaws%3??/33bgb" 

Also muss ich 2 separate Befehle für diese Werte. Ich habe alle möglichen Kombinationen von Grep ausprobiert und ich habe noch nichts zu tun.

Ich möchte nur Grep für den Befehl verwenden, meine Situation wird nicht erlauben, irgendwelche Tools zu installieren.

Vielen Dank!

+0

Verwenden Sie keine Textverarbeitungstools zum Verarbeiten des JSON-Streams. Verwenden Sie einen geeigneten Syntax-aware-Parser – Inian

+0

Was ist mit Python? Ist es eingebaut? – Inian

+0

In Ihrem Fall brauchen Sie nur 'awk'/arn:/{print $ 2; exit} 'jsonFile' oder 'awk'/arn:/{print $ 2; Beenden} 'jsonFile' – Inian

Antwort

1

Es gibt einige mögliche Lösungen, abhängig von einem Werkzeugsatz, der für Sie verfügbar ist. Nehmen wir an, dass die Bash-Variable JSON die gesamte JSON-Struktur enthält, die Sie im Thema beschrieben haben.

Bash + Python:

ARN=`echo "$JSON" | python -c "import sys, json; print json.load(sys.stdin)['upload']['arn']"` 
URL=`echo "$JSON" | python -c "import sys, json; print json.load(sys.stdin)['upload']['url']"` 

Bash + jq:

URL=`echo "$JSON" | jq -r '.upload.url'` 
ARN=`echo "$JSON" | jq -r '.upload.arn'` 

Bash + grep + awk

URL=`echo "$JSON" | grep -Po '"url":.*?".*?"' | awk '{ print $2 }'` 
ARN=`echo "$JSON" | grep -Po '"arn":.*?".*?"' | awk '{ print $2 }'` 

Jetzt können Sie

echo "$ARN" 
echo "$URL" 
tun

Aber wie bereits von anderen erwähnt, sollten Sie awk, grep, sed und andere Tools zur Textverarbeitung nicht verwenden. Verwenden Sie hierfür spezielle Tools.