Regex 如何使用curl和sed从短json查询中提取单个元素
我正在编写一个简短的bash脚本,从curl响应中获取一个JSON元素Regex 如何使用curl和sed从短json查询中提取单个元素,regex,bash,curl,sed,Regex,Bash,Curl,Sed,我正在编写一个简短的bash脚本,从curl响应中获取一个JSON元素 curl -H "api_key:[API_PASSWORD]" http://api.wordnik.com/v4/word.json/button/pronunciations?sourceDictionary=macmillan&typeFormat=IPA&useCanonical=false 返回: [{"id":0,"seq":0,"raw":"ˈbʌt(ə)n","rawType":"IPA
curl -H "api_key:[API_PASSWORD]" http://api.wordnik.com/v4/word.json/button/pronunciations?sourceDictionary=macmillan&typeFormat=IPA&useCanonical=false
返回:
[{"id":0,"seq":0,"raw":"ˈbʌt(ə)n","rawType":"IPA"},{"id":0,"seq":0,"raw":"ˈbʌt(ə)n","rawType":"IPA"}]
我试图提取“ˈbʌt(ə)n”元素
虽然我不熟悉正则表达式,但我认为应该使用以下字符串替换:
/.*"(.*)",/
我正在尝试运行以下命令,但它似乎不起作用:
curl -H "api_key:[API_KEY]" http://api.wordnik.com/v4/word.json/button/pronunciations?sourceDictionary=macmillan&typeFormat=IPA&useCanonical=false | sed /.*"(.*)",\1/
我肯定有一些事情我做错了,在搜索和阅读了几个小时的regex和bash之后,我别无选择
我不需要使用sed,我只是想在bash命令行中寻找一种快速的方法,以便在mac上的TextExpander脚本中实现它。使用
STRING:REGEXP
从json字符串中提取值:
string=$(curl -H "api_key:[API_PASSWORD]" http://api.wordnik.com/v4/word.json/button/pronunciations?sourceDictionary=macmillan&typeFormat=IPA&useCanonical=false)
raw=$(expr "$string" : '.*"raw":"\([^"]*\)"')
echo $raw
请参见man expr
:
STRING:REGEXP
字符串中REGEXP的锚定模式匹配
模式匹配返回在\(和\)或null之间匹配的字符串
正则表达式可能不适合使用。
在Ubuntu 9.10上:
$ sudo apt-get install jsonlib-perl
$ curl -quiet 'http://api.wordnik.com/v4/word.json/button/pronunciations?sourceDictionary=macmillan&typeFormat=IPA&useCanonical=false' | perl -e 'use JSON; print JSON->new->allow_nonref->decode(<>)->{raw}'
$sudo apt get install jsonlib perl
$curl-安静'http://api.wordnik.com/v4/word.json/button/pronunciations?sourceDictionary=macmillan&typeFormat=IPA&useCanonical=false“| perl-e”使用JSON;打印JSON->new->allow_nonref->decode()->{raw}
谢谢,太棒了。我不打算使用库解析json的唯一原因是,我希望能够在Mac之间移动脚本,而无需另外安装任何东西。不过这是一个很棒的提示,谢谢你的链接。非常感谢!这很有效,也很有意义。