Заменить подстроку другим значением в основной строке

Заменить подстроку другим значением в основной строке

У меня есть строка с рисунком ниже

SrcWorkspaceName=abc_1234;SrcEndVer=1409;Lang=ENU,FRA,NLD

Мне нужно SrcEndVerзаменить значение 1409другим числом.

Здесь число хранится в переменной, скажем

Var=1600

Таким образом, 1409значение следует заменить на переменную.Var

Например, как показано ниже.

SrcWorkspaceName=abc_1234;SrcEndVer=1600;Lang=ENU,FRA,NLD

решение1

Это возможно:

sed 's/;SrcEndVer=[0-9]*/;SrcEndVer=1600/'

Выход:

SrcWorkspaceName=abc_1234;SrcEndVer=1600;Lang=ENU,FRA,NLD

решение2

С использованиемМиллерсDKVP: пары ключ-значениеформат:

$ 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

решение3

Поскольку никакой другой информации не предоставлено, я бы попробовал следующую команду sed.

sed -i -e 's/\(.*;SrcEndVer=\)[^;]*\(;.*\)/\11600\2/' file.txt

Где file.txtбудет файл, содержащий вашу строку.

s — это команда замены для sed.
s/pattern1/pattern2/ заменит pattern1 на pattern2
\(xxx\)— это обратная ссылка, на которую будет ссылаться номер, например \1

sed поместит в первую обратную ссылку \(.*;SrcEndVer=\) все, что до и включая ;SrcEndVer=, SrcWorkspaceName=abc_1234;SrcEndVer=
затем [^;]* столько символов, сколько не являются ';' 1409
, а во вторую обратную ссылку \( следующие ';' и .*\) оставшуюся часть строки ;Lang=ENU,FRA,NLD.

sed заменит это на первую обратную ссылку \1, SrcWorkspaceName=abc_1234;SrcEndVer=затем 1600 и вторую обратную ссылку \2 ;Lang=ENU,FRA,NLD.

Что даст вам:
SrcWorkspaceName=abc_1234;SrcEndVer=1600;Lang=ENU,FRA,NLD

Связанный контент