メイン文字列内の部分文字列を別の値に置き換える

メイン文字列内の部分文字列を別の値に置き換える

以下のパターンの文字列があります

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/ は pattern1 を pattern2 に置き換えます。
\(xxx\)これは番号で参照される後方参照です (例: \1)。

sed は、最初のバック参照 \(.*;SrcEndVer=\) に ;SrcEndVer= より前にあるすべての文字と、それに続くSrcWorkspaceName=abc_1234;SrcEndVer=
';' 以外の文字と同じ数の [^;]*を配置し1409
、2 番目のバック参照 \(次の ';' と .*\) に行の残りの部分を配置します;Lang=ENU,FRA,NLD

sed はこれを最初のバック参照 \1 に置き換え、SrcWorkspaceName=abc_1234;SrcEndVer=次に 1600 と 2 番目のバック参照 \2 に置き換えます;Lang=ENU,FRA,NLD

これにより、次のことが実現します。
SrcWorkspaceName=abc_1234;SrcEndVer=1600;Lang=ENU,FRA,NLD

関連情報