
以下のパターンの文字列があります
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