Ersetzen einer Teilzeichenfolge durch einen anderen Wert in einer Hauptzeichenfolge

Ersetzen einer Teilzeichenfolge durch einen anderen Wert in einer Hauptzeichenfolge

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 SrcEndVerersetzen .1409

Hier wird die Zahl in einer Variablen gespeichert, sagen wir

Var=1600

Der Wert sollte also 1409durch 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.txthandelt 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

verwandte Informationen