У меня есть следующий скрипт bash для анализа конечных точек JSON:
echo curl -s -H "X-Auth-Token: my_access_token" -X GET "https://api.selvpc.ru/identity/v3/endpoints?interface=public" | python -mjson.tool | grep -Pi '^\s*"url":\s*".*",?$' | awk '{print $2}' | tr -d '"' | sed "s/[%\\\$](tenant_id)s/my_project_id/g")
Но Баш говорит:
-bash: синтаксическая ошибка рядом с неожиданным токеном `)'
Мой хостер говорит, что этот скрипт хорошо работает на ОС на базе Linux, но не гарантирует работу на OS X. В чем может быть проблема с синтаксисом?
ИЗМЕНИТЬ:
Если я использую следующее:
curl -s -H "X-Auth-Token: my_access_token" -X GET "https://api.selvpc.ru/identity/v3/endpoints?interface=public" | python -mjson.tool
JSON анализируется, как и ожидалось. Но с grep -Pi '^\s*"url":\s*".*",?$'
я думаю, это вызывает grep
предупреждение
использование: grep [-abcDEFGHhIiJLlmnOoqRSsUVvwxZ] [-A число] [-B число] [-C[число]] [-e шаблон] [-f файл] [--binary-files=значение] [--color=когда] [--context[=num]] [--directories=action] [--label] [--line-buffered] [--null] [шаблон] [файл ...]
Я предполагаю, что первая проблема - ошибка grep?
)
. Пометка о закрытии, так как это типографская ошибка. - person 4ae1e1   schedule 24.11.2015curl
, то почему вы пишетеecho
впереди? Удалите этоecho
. Во-вторых, из вашегоgrep
синопсиса следует, что вашgrep
не поддерживает-P
; вы случайно не на OS X? (Ах, да, теперь я вижу предложение об OS X.) В этом случае вам нужно немного изменить регулярное выражение (на самом деле достаточно экранирования?
):grep -i '^\s*"url":\s*".*",\?$'
. - person 4ae1e1   schedule 24.11.2015grep
иawk
,tr
,sed
и т. д. — это плохо. Получите выделенный процессор JSON, например, jq. - person 4ae1e1   schedule 24.11.2015?
на\?
, потому что здесь мы имеем дело с BRE, где?
— буквальный вопросительный знак, а\?
— магический метасимвол. - person 4ae1e1   schedule 24.11.2015