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"
}
무엇이 바뀌어야 합니까?
답변1
이해할 수는 있지만 원하는 방식은 아닙니다. 정규식 조각은 {*
0개 이상의 {
문자와 일치하고 n*
0개 이상의 문자와 일치하므로 전체 n
표현식은 , 등과 {*clipper-coin*}
일치합니다 .{clipper-coin}
{{{clipper-coi}
clipper-coinnnnnn}
줄 지향 텍스트 처리 유틸리티(예: 표준 Unix 텍스트 처리 도구 상자에 있는 대부분의 유틸리티)는 JSON과 같은 구조화된 데이터를 구문 분석하는 데에는 좋지 않은 도구입니다(GNU 팀과 다른 팀이 추가 기능을 사용하여 확장했음에도 불구하고). 대신 JSON 파서를 사용하고 싶을 가능성이 높습니다.
반환된 JSON 문서의 내용을 구문 분석하려면 ( id
이 서버의 출력에서는 bitcoin
아무 것도 표시되지 않음 ) JSON 구문 분석기를 사용하세요. 예:clipper-coin
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
표현식은 반환된 JSON 배열을 필터링하여 키가 값에 해당하는 요소를 .[] | select(.id == "bitcoin")
찾습니다 .id
bitcoin
price_usd
예제 값을 선택하려면 다음을 사용하세요.
$ curl -s 'https://api.coinmarketcap.com/v1/ticker/' | jq '.[] | select(.id == "bitcoin").price_usd'
"9630.84837853"
따옴표를 제거하려면 jq -r
대신 just를 사용하십시오 jq
.
jq
설명서 도 참조하세요 .
를 사용하면 jq
다음과 같이 percent_change_1h
가장 높은 값을 가진 항목의 기호를 가져오는 복잡한 쿼리를 쉽게 만들 수도 있습니다.
$ curl -s 'https://api.coinmarketcap.com/v1/ticker/' | jq 'max_by(.percent_change_1h | tonumber).symbol'
"WAX"