2016-04-10 14 views
0

私のコードはシェルスクリプトJSON、マック

ある
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をプリントアウトしていることです。 half_damage_toの範囲内にあるJSON辞書内のすべての項目をどのくらい正確に印刷することができますか?

答えて

0

使用extended-regexp(grep -E)half_damage_to配列で一致し、その後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}' 

出力に分割するawkを使用する:

[ 
    { 
     "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" 
    } 
]