2012-12-17 18 views
5

Potrzebuję parsować jsonarray za pomocą regex. Mój json toParsowanie JSON w skrypcie powłoki z regex

"keys": [ 
     { 
     "host": "example.com"  
     }, 
     { 
     "host": "example.net" 
     } 
    ] 

Potrzebuję uzyskać wartości dwóch hostów.

+0

Jeśli był właściwy json (np. Zawinięty w '{}'); możesz użyć ['jq -r '.keys [] | .host''] (http://stedolan.github.io/jq/) – jfs

Odpowiedz

10

Gdy chcesz, aby wyodrębnić tekst, grep jest twoim przyjacielem:

grep -Po '(?<="host": ")[^"]*' myjsonFile 

Na przykład:

kent$ echo '"keys": [ 
     { 
     "host": "example.com"  
     }, 
     { 
     "host": "example.net" 
     } 
    ]'|grep -Po '(?<="host": ")[^"]*' 

example.com 
example.net 
+2

Czy mógłbyś dodać więcej wyjaśnień do tego anwser? –

+5

nie działa na komputerze Mac – Andy

+0

@Andy potrzebuje gnu grep. – Kent

1

Poniżej regex będzie chwycić wartości hostów przy użyciu non-chciwy KLEENE wieloznaczny:

/"host":\s"(.*?)"/