2017-10-13 16 views
1

Ich Zeichenfolge von einem Dienst so etwas wie dieses bekommen,Shell Script String Extraktion

{"statusCode":200,"statusText":"OK","responseEntity":{"authMethod":"Bearer","encodedHeader":"SCBjYjA5MTEtNTFjZi00ZTBjLWFmN2UtMzFhDTYzYzA3EjFk","expiresDate":"2017-10-16T14:58:24.697Z"}} 

Ich möchte encodedHeader Wert extrahieren, die

SCBjYjA5MTEtNTFjZi00ZTBjLWFmN2UtMzFhDTYzYzA3EjFk 

ich mit Version sed versuchte ich weiß, aber kein Glück . jede Hilfe zu diesem

Antwort

0

Hier ist eine Möglichkeit, es mit AWK zu tun.

~$ myline={"statusCode":200,"statusText":"OK","responseEntity":{"authMethod":"Bearer","encodedHeader":"SCBjYjA5MTEtNTFjZi00ZTBjLWFmN2UtMzFhDTYzYzA3EjFk","expiresDate":"2017-10-16T14:58:24.697Z"}} 

Und

~$ echo $myline | awk -F[:,] '{print $9 }' 

ouputs:

SCBjYjA5MTEtNTFjZi00ZTBjLWFmN2UtMzFhDTYzYzA3EjFk 

[:,] passt ein einzelnes Zeichen in der Liste.

,: sind die Feldtrennzeichen und das Feld, das Sie ist die Nummer 9.

+0

Dieser arbeitete für Ich – Beginner

+0

Sie können immer als Antwort akzeptieren, wenn es das tut, was Sie w anted :) – zee

2

Wenn Sie awk dann

awk 'match($0,/"encodedHeader":"([^"]*)"/,arr){print arr[1]}' <<<"$line" 

Testergebnisse haben GNU wollen:

$ line='{"statusCode":200,"statusText":"OK","responseEntity":{"authMethod":"Bearer","encodedHeader":"SCBjYjA5MTEtNTFjZi00ZTBjLWFmN2UtMzFhDTYzYzA3EjFk","expiresDate":"2017-10-16T14:58:24.697Z"}}'; 
$ awk 'match($0,/"encodedHeader":"([^"]*)"/,arr){print arr[1]}' <<<"$line" 
SCBjYjA5MTEtNTFjZi00ZTBjLWFmN2UtMzFhDTYzYzA3EjFk 
+2

Anfänger Ich würde empfehlen, dass Sie @ 3161993 Lösung +1 verwenden :). Sie müssen sich keine Sorgen machen, dass die Anzahl der Felder geändert wird. – zee

0
awk -F\" '{print $16}' file 

SCBjYjA5MTEtNTFjZi00ZTBjLWFmN2UtMzFhDTYzYzA3EjFk