
Ich habe eine Zeichenfolge mit einem folgenden Muster
SrcWorkspaceName=abc_1234;SrcEndVer=1409;Lang=ENU,FRA,NLD
Ich muss den Wert durch eine andere Zahl SrcEndVer
ersetzen .1409
Hier wird die Zahl in einer Variablen gespeichert, sagen wir
Var=1600
Der Wert sollte also 1409
durch eine Variable ersetzt werdenVar
Wie die Ausgabe unten zum Beispiel
SrcWorkspaceName=abc_1234;SrcEndVer=1600;Lang=ENU,FRA,NLD
Antwort1
Dies ist eine Möglichkeit:
sed 's/;SrcEndVer=[0-9]*/;SrcEndVer=1600/'
Ausgabe:
SrcWorkspaceName=abc_1234;SrcEndVer=1600;Lang=ENU,FRA,NLD
Antwort2
Verwenden vonMüllermit demDKVP: Schlüssel-Wert-PaareFormat:
$ echo 'SrcWorkspaceName=abc_1234;SrcEndVer=1409;Lang=ENU,FRA,NLD' |
mlr --dkvp --fs ';' put '$SrcEndVer = 1600'
SrcWorkspaceName=abc_1234;SrcEndVer=1600;Lang=ENU,FRA,NLD
Antwort3
Da keine weiteren Informationen bereitgestellt werden, würde ich den folgenden Sed-Befehl versuchen.
sed -i -e 's/\(.*;SrcEndVer=\)[^;]*\(;.*\)/\11600\2/' file.txt
Dabei file.txt
handelt es sich um eine Datei, die Ihren String enthält.
s ist der Ersatzbefehl für sed.
s/pattern1/pattern2/ ersetzt pattern1 durch pattern2
\(xxx\)
ist eine Rückreferenz, die mit einer Nummer referenziert wird, z. B. \1
sed fügt in die erste Rückreferenz \(.*;SrcEndVer=\) alles vor und einschließlich ;SrcEndVer= ein, SrcWorkspaceName=abc_1234;SrcEndVer=
dann [^;]* so viele Zeichen, wie nicht ';' sind, 1409
und in die zweite Rückreferenz \( das nächste ';' und .*\) den Rest der Zeile ;Lang=ENU,FRA,NLD
.
sed ersetzt dies durch den ersten Rückverweis \1, SrcWorkspaceName=abc_1234;SrcEndVer=
dann 1600 und den zweiten Rückverweis \2 ;Lang=ENU,FRA,NLD
.
Das gibt Ihnen:
SrcWorkspaceName=abc_1234;SrcEndVer=1600;Lang=ENU,FRA,NLD