Как использовать curl и sed для извлечения одного элемента из короткого запроса json - PullRequest
4 голосов
/ 19 сентября 2011

Я работаю над коротким сценарием bash, чтобы получить элемент JSON из ответа curl.

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/

IЯ уверен, что есть несколько вещей, которые я делаю неправильно, и после нескольких часов поиска и чтения регулярных выражений и bash у меня нет выбора.

Мне не нужно использовать sedЯ просто ищу быстрый способ сделать это в командной строке bash, чтобы я мог реализовать его в сценарии TextExpander на компьютере Mac.

Ответы [ 2 ]

7 голосов
/ 19 сентября 2011

Используйте 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
1 голос
/ 19 сентября 2011

Регулярные выражения могут быть неправильной вещью. http://www.codinghorror.com/blog/2008/06/regular-expressions-now-you-have-two-problems.html

В 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}'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...