我喜欢收听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
答案 0 :(得分:4)
你可以使用剪切来做到这一点。
curl -s http://127.0.0.1:8080/requests/status.json | \
grep 'now_playing' | cut -d : -f 2 | sed 's/"//g'
cut命令可帮助您选择字段。字段由分隔符定义,在本例中为':'
。 -d
选项指定分隔符,-f
选项指定我们要选择的字段。
sed部分只是删除引号。
答案 1 :(得分:2)
如果你有GNU grep
:
curl ... | grep -Po '(?<=now_playing":")[^"]+'
Cody Simpson - On My Mind
curl ...
替换为您的实际curl
命令。
修改强>
我会选择awk
代表你的第二个请求:
curl ... | awk -F'"' '{split($4,a," - ");print "artist:",a[1],"\ntitle:",a[2]}'
artist: Cody Simpson
title: On My Mind
存储在shell变量中:
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
答案 2 :(得分:1)
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 }'