Bash 解析curlJSON响应并使用响应构建另一个请求
我正在尝试构建一个shell脚本,用于获取随机XKCD漫画的图像url,以便使用Übersicht显示它。由于您只能向XKCD API查询最新漫画或特定漫画,因此我需要:Bash 解析curlJSON响应并使用响应构建另一个请求,bash,curl,grep,Bash,Curl,Grep,我正在尝试构建一个shell脚本,用于获取随机XKCD漫画的图像url,以便使用Übersicht显示它。由于您只能向XKCD API查询最新漫画或特定漫画,因此我需要: 向http://xkcd.com/info.0.json,获取num元素的值 向http://xkcd.com/XXX/info.0.json其中XXX是num的值 我当前的命令如下所示,并成功返回漫画编号: curl -s 'http://xkcd.com/1510/info.0.json' | grep -Eo '"num
http://xkcd.com/info.0.json
,获取num
元素的值http://xkcd.com/XXX/info.0.json
其中XXX
是num
的值curl -s 'http://xkcd.com/1510/info.0.json' | grep -Eo '"num": \d+' | grep -Eo '\d+'
grep
中使用捕获组,所以我需要对json进行两次grep。常见的建议是使用Mac OS X 10.10不支持的-P
XXX
)读入第二个curl-s'http://xkcd.com/XXX/info.0.json“
命令 curl -sS http://xkcd.com/info.0.json | /usr/bin/perl -pe 's/.*"num": ([0-9]+).*/\1/'
num=$(curl -sS http://xkcd.com/info.0.json | /usr/bin/perl -pe 's/.*"num": ([0-9]+).*/\1/')
curl -sS "http://xkcd.com/${num}/info.0.json"
或者更简洁地说,二合一,尽管不太可读:
curl -sS "http://xkcd.com/$(curl -sS http://xkcd.com/info.0.json | /usr/bin/perl -pe 's/.*"num": ([0-9]+).*/\1/')/info.0.json"
顺便说一下,我强烈推荐使用JSON作为命令行处理器。要使用
jq
提取num
,只需
curl -sS http://xkcd.com/info.0.json | jq '.num'
虽然您没有要求,但这里有一个简单的带有jq
的单行代码,用于提取最新图像的URI:
curl -sS "http://xkcd.com/$(curl -sS http://xkcd.com/info.0.json | jq '.num')/info.0.json" | jq -r '.img'
示例输出:
http://imgs.xkcd.com/comics/spice_girl.png
这在航站楼效果很好,所以我接受了。谢谢,干得好。现在我只需要让它在Übersicht中工作-我得到一个
八进制转义序列
错误。@SamuelLindblom我在命令中看不到任何八进制转义序列。我不使用Übersicht-你能详细解释哪一步出错吗?(如果您不确定,可以分解管道并单独测试。)