2016-04-10 3 views
0

Вот мой кодShell Script Json, Mac

function poke() { 

    json="curl -s -X GET http://pokeapi.co/api/v2/type/bug.json"; 
    prop="half_damage_to" 
    temp=echo $json | sed 's/\\\\\//\//g' | sed 's/[{}]//g' | awk -v k="text" '{n=split($0,a,","); for (i=1; i<=n; i++) print a[i]}' | sed 's/\"\:\"/\|/g' | sed 's/[\,]/ /g' | sed 's/\"//g' | grep -w $prop 
    echo ${temp##*|} 
} 

Проблема здесь состоит в том, что терминал только распечатав первый элемент в формате JSON, half_damage_to:[name|fighting, когда она должна быть печать их всех. Как именно я могу распечатать все элементы в словаре JSON, которые находятся в пределах half_damage_to?

ответ

0

Использование extended-regexp(grep -E) для соответствия half_damage_to массива, а затем использовать awk разделить на half_damage_to

curl -s -X GET http://pokeapi.co/api/v2/type/bug.json | grep -oE '"half_damage_to":\[{.*?\}]' | awk 'BEGIN {FS="half_damage_to\":"} {print $2}' 

Выход:

[ 
    { 
     "name":"fighting", 
     "url":"http://pokeapi.co/api/v2/type/2.json" 
    }, 
    { 
     "name":"flying", 
     "url":"http://pokeapi.co/api/v2/type/3.json" 
    }, 
    { 
     "name":"poison", 
     "url":"http://pokeapi.co/api/v2/type/4.json" 
    }, 
    { 
     "name":"ghost", 
     "url":"http://pokeapi.co/api/v2/type/8.json" 
    }, 
    { 
     "name":"steel", 
     "url":"http://pokeapi.co/api/v2/type/9.json" 
    }, 
    { 
     "name":"fire", 
     "url":"http://pokeapi.co/api/v2/type/10.json" 
    }, 
    { 
     "name":"fairy", 
     "url":"http://pokeapi.co/api/v2/type/18.json" 
    } 
]