
У меня есть строка с рисунком ниже
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