Regex 如何使用curl和sed从短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

我正在编写一个简短的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"},{"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之间移动脚本,而无需另外安装任何东西。不过这是一个很棒的提示,谢谢你的链接。非常感谢!这很有效,也很有意义。