Grep的理解是:
curl https://api.coinmarketcap.com/v1/ticker/ | grep "clipper-coin"
但不是这个:
curl https://api.coinmarketcap.com/v1/ticker/ | grep "{*clipper-coin*}"
我期望的产出是:
{
"id": "clipper-coin",
"name": "Clipper Coin",
"symbol": "CCCX",
"rank": "100",
"price_usd": "0.0159861038",
"price_btc": "0.00000167",
"24h_volume_usd": "28652.7472891",
"market_cap_usd": "60356670.0",
"available_supply": "3775570996.0",
"total_supply": "5000000000.0",
"max_supply": null,
"percent_change_1h": "1.12",
"percent_change_24h": "0.24",
"percent_change_7d": "-6.9",
"last_updated": "1564524066"
}
有什么需要改变的?
发布于 2019-07-30 14:47:28
它明白这一点,但不是你想要的那样。正则表达式片段{*
匹配零或多个{
字符,n*
匹配零或多个n
字符,因此完整表达式{*clipper-coin*}
将匹配{clipper-coin}
、{{{clipper-coi}
或clipper-coinnnnnn}
等。
面向行的文本处理实用程序(例如标准Unix文本处理工具箱中的大多数实用程序)是解析结构化数据(如JSON )的糟糕工具(即使GNU和其他人为了方便起见而扩展了额外的功能)。您很可能希望使用JSON解析器。
若要为任何id
(即bitcoin
)解析返回的JSON文档(在该服务器的输出中没有看到clipper-coin
),请使用JSON解析器,例如jq
:
$ curl -s 'https://api.coinmarketcap.com/v1/ticker/' | jq '.[] | select(.id == "bitcoin")'
{
"id": "bitcoin",
"name": "Bitcoin",
"symbol": "BTC",
"rank": "1",
"price_usd": "9626.82712316",
"price_btc": "1.0",
"24h_volume_usd": "13830555865.2",
"market_cap_usd": "171817319309",
"available_supply": "17847762.0",
"total_supply": "17847762.0",
"max_supply": "21000000.0",
"percent_change_1h": "0.46",
"percent_change_24h": "1.02",
"percent_change_7d": "-3.11",
"last_updated": "1564526372"
}
jq
表达式.[] | select(.id == "bitcoin")
将为其id
键对应于值bitcoin
的元素筛选返回的JSON数组。
要从中提取例如price_usd
值,请使用
$ curl -s 'https://api.coinmarketcap.com/v1/ticker/' | jq '.[] | select(.id == "bitcoin").price_usd'
"9630.84837853"
为了去掉引号,使用jq -r
代替jq
。
还请参阅jq
手册。
使用jq
,您还可以轻松地进行复杂的查询,比如这个查询,它获取具有最高percent_change_1h
值的条目的符号:
$ curl -s 'https://api.coinmarketcap.com/v1/ticker/' | jq 'max_by(.percent_change_1h | tonumber).symbol'
"WAX"
https://unix.stackexchange.com/questions/533015
复制