Austausch einer Versionsnummer in einer Datei...

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Xanthariel
User
Beiträge: 3
Registriert: Montag 17. Dezember 2018, 09:53

Hallo zusammen,
ich versuche mich grade mal wieder an einem Shellscript um in einer Datei (version.yml) die Versionsnummer zu ändern.

Per read -p "Neue Version eingeben: " kann ich die neue Version abfragen (ihr seht vielleicht, bin recht am Anfang der Kunst).
nun dachte ich mir man könne diese neue Versionsnummer $neue_version per sed in die version.yml einfügen und fertig.

Man findet die Zeile in der Datei auch recht einfach über:

Code: Alles auswählen

sed 's/software_version:/software_version: "$software_version"/g' version.yml
das funktioniert aber nicht wie es soll...

nur wird hier quasi nix ersetzt sonder dazwischen gepappt und auch nicht der Inhalt sondern der "string?":
software_version: "$software_version" "1.20.1+7546a903" eingefügt :-(

ich möchte aber diese Werte "1.20.1+7546a903" mit dem Inhalt von $software_version überschreiben das Ergebnis sollte so aussehen:
software_version: "1.20.1+7546a903"

Hat einer dazu eine zündende Idee, die mich weiterbringt?
Ist sed dazu überhaut die beste Wahl, kann man das einfacher lösen direkt in bash?

LG an alle die sich Gedanken dazu machen.
Xan
Benutzeravatar
sparrow
User
Beiträge: 4538
Registriert: Freitag 17. April 2009, 10:28

Schreib ein Python-Script?!?
Benutzeravatar
__blackjack__
User
Beiträge: 14051
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@Xanthariel: Die Shell ersetzt Variablen nur in Zeichenketten die in doppelten Anführungsstrichen eingefasst sind. Du hast da zwar doppelte Anführungsstriche, aber *innerhalb* einer Zeichenkette das heisst das sind einfach nur ganz normale Zeichen die auch 1:1 so übernommen werden.

Und dann muss die alte Versionsnummer noch mit in das Suchmuster.

Code: Alles auswählen

sed "s/software_version: \".+\"/software_version: \"$software_version\"/g" version.yml
Allerdings ist das alles andere als robust, wie immer wenn man versucht komplexe, strukturierte Datenformate wie simplen unstrukturierten Text zu verarbeiten. Zum Beispiel müssen die Anführungszeichen bei der Version nicht vorhanden sein. Es könnte statt im Block-Stil im Flow-Stil sein, ganz oder teilweise, es könnte ein Tag vor dem Wert sein, …

Wenn man YAML ver-/bearbeiten will, nimmt man am besten einen YAML-Parser dafür. Also bei Python beispielsweise PyYAML.
“Vir, intelligence has nothing to do with politics!” — Londo Mollari
Antworten