1行のテキストファイルで特定のキーの値を変更する

1行のテキストファイルで特定のキーの値を変更する

res.dat変更する必要のあるデータを含む大容量ファイルがあります。すべてのデータは1行にあります。

たとえば、

L1TRAIN="200" NEEDL2="14" L2TRAIN="300" NEEDL3="16" L3TRAIN="400" NEEDL4="99" L4TRAIN="600" NEEDL5="99" L5TRAIN="900" DELAY="60" COOLTIME="0" KORNAME="화염풍" SKILLTYPE="0" TOOLTIP="A defensive spell that allows you to push away enemies of lower level. This spell has a fixed chance for success. The range of the spell and chance of success increase with training." /><VALUE MAGID="9" MAGNAME="Lavastrike" TYPE="0" EFFECTTYPE="5" EFFECT="7" SPELL="11" POWER="14" MAXPOWER="18" DEFSPELL="15" DEFPOWER="12" DEFMAXPOWER="16" JOB="1" PHASE="0" NEEDL1="20" L1TRAIN="500" NEEDL2="22" L2TRAIN="600" NEEDL3="24" L3TRAIN="700" NEEDL4="99" L4TRAIN="900" NEEDL5="99" L5TRAIN="1200" DELAY="80" COOLTIME="0" KORNAME="염사장" SKILLTYPE="0" TOOLTIP="A spell that shoots out line of fire along the ground, damaging all enemies caught within the fire. Its damage increases with training." /><VALUE MAGID="10" MAGNAME="LightningBeam" TYPE="2" EFFECTTYPE="6" EFFECT="8" SPELL="12" POWER="14" MAXPOWER="14" DEFSPELL="15" DEFPOWER="12" DEFMAXPOWER="16" JOB="1" PHASE="0" NEEDL1="21" L1TRAIN="500" NEEDL2="23" L2TRAIN="600" NEEDL3="25" L3TRAIN="700" NEEDL4="99" L4TRAIN="900" NEEDL5="99" L5TRAIN="1200" DELAY="80" COOLTIME="0" KORNAME="뢰인장" SKILLTYPE="0"

L1TRAIN、、、および二重引用符内のデータを見つけて変更する必要があるペイロードで、すべて1行に更新するスクリプトを実行する必要がL2TRAINあります。L3TRAINL4TRAINL5TRAINL1TRAIN="100" L2TRAIN="200" L3TRAIN="300" L4TRAIN="400" L5TRAIN="500"

この例の出力は次のようになります。

L1TRAIN="100" NEEDL2="14" L2TRAIN="200" NEEDL3="16" L3TRAIN="300" NEEDL4="99" L4TRAIN="400" NEEDL5="99" L5TRAIN="500" DELAY="60" COOLTIME="0" KORNAME="화염풍" SKILLTYPE="0" TOOLTIP="A defensive spell that allows you to push away enemies of lower level. This spell has a fixed chance for success. The range of the spell and chance of success increase with training." /><VALUE MAGID="9" MAGNAME="Lavastrike" TYPE="0" EFFECTTYPE="5" EFFECT="7" SPELL="11" POWER="14" MAXPOWER="18" DEFSPELL="15" DEFPOWER="12" DEFMAXPOWER="16" JOB="1" PHASE="0" NEEDL1="20" L1TRAIN="100" NEEDL2="22" L2TRAIN="200" NEEDL3="24" L3TRAIN="300" NEEDL4="99" L4TRAIN="400" NEEDL5="99" L5TRAIN="500" DELAY="80" COOLTIME="0" KORNAME="염사장" SKILLTYPE="0" TOOLTIP="A spell that shoots out line of fire along the ground, damaging all enemies caught within the fire. Its damage increases with training." /><VALUE MAGID="10" MAGNAME="LightningBeam" TYPE="2" EFFECTTYPE="6" EFFECT="8" SPELL="12" POWER="14" MAXPOWER="14" DEFSPELL="15" DEFPOWER="12" DEFMAXPOWER="16" JOB="1" PHASE="0" NEEDL1="21" L1TRAIN="100" NEEDL2="23" L2TRAIN="200" NEEDL3="25" L3TRAIN="300" NEEDL4="99" L4TRAIN="400" NEEDL5="99" L5TRAIN="500" DELAY="80" COOLTIME="0" KORNAME="뢰인장" SKILLTYPE="0"

答え1

1つの方法は次のとおりですsed

sed 's/\(L\([1-5]\)TRAIN="\)[^"]*/\1\200/g' res.dat

これは、グループ化と逆参照を使用して次の項目を置き換えます。

エルNtrain = "何でも_除外_二重_引用符

そして

エルNトレーニング=N00

どこN1との間の数字です5

関連情報