將子字串替換為主字串中的另一個值

將子字串替換為主字串中的另一個值

我有一個帶有以下模式的字串

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

相關內容