regex - 如何使用 curl 和 sed 从简短的 json 查询中提取单个元素

标签 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"},{"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/

我确信我做错了几件事,在搜索和阅读正则表达式和 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
          anchored pattern match of REGEXP in STRING

   Pattern matches return the string matched between \(  and  \)  or null

关于regex - 如何使用 curl 和 sed 从简短的 json 查询中提取单个元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7473951/

相关文章:

regex - 自动机和正则表达式理论工具

bash - 从 ssh session 中检测 user@hostname

linux - Bash 脚本 - 如何在文本文件中匹配模式后插入变量值作为新行,第 2 行

curl - 您如何使用 cURL 在使用 Devise 的 Rails 应用程序上进行身份验证?

ios - 在 Objective-C 中执行基于 curl 的操作

rest - 进行 REST 查询的问题,elasticsearch

regex - 在 Python 中验证一组日期的方法

regex - Perl 重新否定后面的可变长度错误

javascript - 如何删除Javascript中的特定空格但不是所有空格

linux - 通讯命令不比较单词