2016-08-18 4 views
1

В Bash я сохранил данные ответа в переменной.Извлечь значение JSON в Bash

Результат выглядит следующим образом:

{"token_type":"Bearer","access_token":"022-8baa5324-f57b-445d-c5ec-821c63a5fd35","expires_in":3600,"scope":"any-website.com"} 

Теперь я хочу, чтобы извлечь значение маркеров доступа в другой вар.

В Linux я решил, что таким образом, и это работает:

echo "$response_json" | grep -oP '(?<="access_token":")[^"]*' 

В результате я получаю:

022-8baa5324-f57b-445d-c5ec-821c63a5fd35 

Моя проблема заключается в том, что MacOS не поддерживает параметр Grep P (выражение Perl) больше. Параметр E не работает с этим выражением.

Я был бы признателен за любую помощь в решении, не требуя установки дополнительных инструментов Bash.

ответ

1

Все говорят, что они не хотят устанавливать новые инструменты, но на самом деле линейно ориентированные инструменты, такие как grep, просто не были предназначены для работы со структурированным текстом, таким как JSON. Если вы собираетесь работать с JSON, получите инструменты, предназначенные для его обработки.

jq является одним из таких вариантов:

$ echo "$response_json" | jq -r '.access_token' 
022-8baa5324-f57b-445d-c5ec-821c63a5fd35 
Смежные вопросы