
Tengo una cuerda con un patrón a continuación.
SrcWorkspaceName=abc_1234;SrcEndVer=1409;Lang=ENU,FRA,NLD
Necesito SrcEndVer
reemplazar el valor por 1409
otro número.
Aquí el número se almacena en una variable, digamos
Var=1600
Entonces, 1409
el valor debe reemplazarse con una variable.Var
Como el resultado como se muestra a continuación, por ejemplo.
SrcWorkspaceName=abc_1234;SrcEndVer=1600;Lang=ENU,FRA,NLD
Respuesta1
Esta es una posibilidad:
sed 's/;SrcEndVer=[0-9]*/;SrcEndVer=1600/'
Producción:
SrcWorkspaceName=abc_1234;SrcEndVer=1600;Lang=ENU,FRA,NLD
Respuesta2
UsandoMolinerocon elDKVP: pares clave-valorformato:
$ 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
Respuesta3
Como no se proporciona ninguna otra información, probaría el siguiente comando sed.
sed -i -e 's/\(.*;SrcEndVer=\)[^;]*\(;.*\)/\11600\2/' file.txt
Por lo cual file.txt
sería un archivo que contendría su cadena.
s es el comando sustituto de sed.
s/pattern1/pattern2/ reemplazará patrón1 con patrón2
\(xxx\)
es una referencia anterior a la que se hará referencia con un número, por ejemplo, \1
sed colocará en la primera referencia posterior \(.*;SrcEndVer=\) todo lo anterior e incluido ;SrcEndVer= SrcWorkspaceName=abc_1234;SrcEndVer=
y luego [^;]* tantos caracteres que no sean ';' 1409
y en la segunda referencia posterior \( el siguiente ';' y .*\) el resto de la línea ;Lang=ENU,FRA,NLD
.
sed reemplazará esto con la primera referencia anterior \1, SrcWorkspaceName=abc_1234;SrcEndVer=
luego 1600 y la segunda referencia anterior \2 ;Lang=ENU,FRA,NLD
.
Que te dará:
SrcWorkspaceName=abc_1234;SrcEndVer=1600;Lang=ENU,FRA,NLD