将子字符串替换为主字符串中的另一个值

将子字符串替换为主字符串中的另一个值

我有一个带有以下模式的字符串

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/ 将用pattern2 替换pattern1
\(xxx\)是一个反向引用,将用数字引用,例如\1

sed 将放入第一个反向引用 \(.*;SrcEndVer=\) 之前的所有内容,包括 ;SrcEndVer=SrcWorkspaceName=abc_1234;SrcEndVer=
然后 [^;]* 与非 ';' 的字符一样多1409
并在第二个反向引用中\(下一个';'和.*\)该行的其余部分;Lang=ENU,FRA,NLD

sed 会将其替换为第一个反向引用 \1SrcWorkspaceName=abc_1234;SrcEndVer=然后 1600 和第二个反向引用 \2 ;Lang=ENU,FRA,NLD

这会给你:
SrcWorkspaceName=abc_1234;SrcEndVer=1600;Lang=ENU,FRA,NLD

相关内容