4

sky.fm を聞くのが好きで、curl を使用してメディア情報をクエリします

私が今使っているのは:

curl -s curl http://127.0.0.1:8080/requests/status.json | grep now_playing

これは以下を返します:

"now_playing":"Cody Simpson - On My Mind"

私がしたいのは:

Cody Simpson - On My Mind

さらに良いのは、アーティストとタイトルを別々の変数に入れることです。

artist: Cody Simpson
title: On My mind

解決

#!/bin/bash
a=`curl -s http://127.0.0.1:8080/requests/status.json | grep -Po '(?<=now_playing":")[^"]+'`
artist=$(echo $a | awk -F' - ' '{print $1}')
title=$(echo $a | awk -F' - ' '{print $2}')
echo $artist
echo $title
4

3 に答える 3

4

カットを使用してこれを行うことができます。

curl -s http://127.0.0.1:8080/requests/status.json | \
   grep 'now_playing' | cut -d : -f 2 | sed 's/"//g'

切り取りコマンドは、フィールドの選択に役立ちます。フィールドは区切り文字で定義されます (この場合は':'. -dオプションは区切り文字を指定し、オプション-fは選択したいフィールドを指定します。

sed 部分は、引用符を削除するだけです。

于 2013-03-29T13:06:56.197 に答える
2

あなたが持っている場合のより簡単なアプローチGNU grep

curl ... | grep -Po '(?<=now_playing":")[^"]+'
Cody Simpson - On My Mind

Whereは実際のコマンドcurl ...に置き換えられます。curl

編集:

私はawkあなたの2番目の要求に行きます:

curl ... | awk -F'"' '{split($4,a," - ");print "artist:",a[1],"\ntitle:",a[2]}'
artist: Cody Simpson 
title: On My Mind

シェル変数に格納するには:

artist=$(curl ... | awk -F'"' '{split($4,a," - ");print a[1]}')

echo "$artist"
Cody Simpson

title=$(curl ... | awk -F'"' '{split($4,a," - ");print a[2]}')

echo "$title"
On My Mind
于 2013-03-29T13:18:05.983 に答える
1

sedを使用:

curl -s 'http://127.0.0.1:8080/requests/status.json' | \ 
        sed '/now_playing/s/^\"now_playing\":"\(.*\)"$/\1/'

grep、cut、および tr:

curl -s 'http://127.0.0.1:8080/requests/status.json' | \ 
        grep now_playing | cut -d':' -f2 | tr -d '"'

awkで:

curl -s 'http://127.0.0.1:8080/requests/status.json' | \
        awk -F':' '/now_playing/ {gsub(/"/,""); print $2 }'
于 2013-03-29T13:43:11.083 に答える