Не могу больше ждать, поэтому я добавил несколько свежих идей и нашел следующее решение, которое хорошо зарекомендовало себя с использованием GNU, BSD и BusyBox grep и улучшает поддержку semver:
egrep -o "\"version\".*[^,]*," <<< "$meta" | cut -d ',' -f1 | cut -d ':' -f2 | tr -d '" '
Он работает, вызывая ERE grep с регулярным выражением (с наконечником шляпы ) и использует, cut
чтобы :
вырезать запятую, взять все в правой части, обрезать строку и удалить все присутствующие двойные кавычки.
Данное $meta
из {"version":"5.5.0-beta4",}
вернется точно 5.5.0-beta4
.
Данное $meta
из "version" : 1,
вернется точно 1
.
Предполагается, что version
поле не является последним полем в BLOB-объекте JSON, что является компромиссом для удобочитаемости.
Применительно к исходному вопросу результат:
vers=$(echo "$meta" | egrep -o "\"version\".*[^,]*," | cut -d ',' -f1 | cut -d ':' -f2 | tr -d '" ')
Устранение необходимости обнаружения версии grep и удаление запаха кода.
ОБНОВИТЬ:
Я был в конечном счете, привел к более элегантному решению, используя sed
в последующем вопросе на SO.