Ich konnte nicht länger warten, also habe ich mir ein paar frische Augen zugelegt und die folgende Lösung gefunden, die sich mit GNU, BSD und BusyBox grep gut getestet hat und die Unterstützung für semver verbessert:
egrep -o "\"version\".*[^,]*," <<< "$meta" | cut -d ',' -f1 | cut -d ':' -f2 | tr -d '" '
Es ruft ERE grep mit einem Regex (mit einer Hutspitze ) auf und verwendet cut
dazu, das nachfolgende Komma abzuschneiden, alles auf der rechten Seite zu packen :
, die Zeichenfolge zu trimmen und alle doppelten Anführungszeichen zu entfernen.
Gegeben $meta
von {"version":"5.5.0-beta4",}
wird genau zurückkehren 5.5.0-beta4
.
Gegeben $meta
von "version" : 1,
wird genau zurückkehren 1
.
Angenommen, version
Feld ist nicht das letzte Feld im JSON-Blob, das aus Gründen der Lesbarkeit einen Kompromiss eingeht.
Auf die ursprüngliche Frage angewendet ergibt sich Folgendes:
vers=$(echo "$meta" | egrep -o "\"version\".*[^,]*," | cut -d ',' -f1 | cut -d ':' -f2 | tr -d '" ')
Beseitigung der Notwendigkeit, die Version von grep zu erkennen und den Codegeruch zu entfernen.
AKTUALISIEREN:
Ich wurde schließlich zu einer eleganteren Lösung mit sed
einer Folgefrage zu SO geführt.