Substitua uma substring por outro valor em uma string principal

Substitua uma substring por outro valor em uma string principal

Eu tenho uma string com um padrão abaixo

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

Preciso que o SrcEndVervalor seja substituído por 1409outro número.

Aqui o número é armazenado em uma variável, digamos

Var=1600

Portanto, 1409o valor deve ser substituído por uma variávelVar

Como a saída abaixo, por exemplo

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

Responder1

Esta é uma possibilidade:

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

Saída:

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

Responder2

UsandoMoleirocom oDKVP: pares de valores-chaveformatar:

$ 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

Responder3

Como nenhuma outra informação é fornecida, eu tentaria o seguinte comando sed.

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

Onde file.txtseria um arquivo contendo sua string.

s é o comando substituto para sed.
s/pattern1/pattern2/ substituirá pattern1 por pattern2
\(xxx\)é uma referência anterior que será referenciada com um número, por exemplo, \1

sed colocará na primeira referência anterior \(.*;SrcEndVer=\) tudo antes e incluindo ;SrcEndVer= SrcWorkspaceName=abc_1234;SrcEndVer=
then [^;]* tantos caracteres que não sejam ';' 1409
e na segunda referência anterior \( o próximo ';' e .*\) o resto da linha ;Lang=ENU,FRA,NLD.

sed substituirá isso pela primeira referência anterior \1, SrcWorkspaceName=abc_1234;SrcEndVer=depois 1600 e pela segunda referência anterior \2 ;Lang=ENU,FRA,NLD.

O que lhe dará:
SrcWorkspaceName=abc_1234;SrcEndVer=1600;Lang=ENU,FRA,NLD

informação relacionada