2016-04-10 156 views
0

這裏是我的代碼Shell腳本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時,應該將它們打印所有。我到底該如何打印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" 
    } 
]