
Eu tenho uma string com um padrão abaixo
SrcWorkspaceName=abc_1234;SrcEndVer=1409;Lang=ENU,FRA,NLD
Preciso que o SrcEndVer
valor seja substituído por 1409
outro número.
Aqui o número é armazenado em uma variável, digamos
Var=1600
Portanto, 1409
o 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.txt
seria 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