Reemplazar una subcadena con otro valor en una cadena principal

Reemplazar una subcadena con otro valor en una cadena principal

Tengo una cuerda con un patrón a continuación.

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

Necesito SrcEndVerreemplazar el valor por 1409otro número.

Aquí el número se almacena en una variable, digamos

Var=1600

Entonces, 1409el 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.txtserí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

información relacionada