4

変更を加えたい XML ファイルがあります。たとえば、Vim でファイルを開き、検索を実行して、memory="..."属性のすべてのインスタンスを to に置き換えますmemory="24G"が、要素が from である場合に限りますname="node-0..."。次に例を示します。

process name="node-0-3" numaNode="3" memory="14G" logConfig="logback-shards.xml"
process name="node-0-4" numaNode="4" memory="34G" logConfig="logback-shards.xml"
process name="node-0-5" numaNode="5" memory="44G" logConfig="logback-shards.xml"

と置換する

process name="node-0-3" numaNode="3" memory="24G" logConfig="logback-shards.xml"
process name="node-0-4" numaNode="4" memory="24G" logConfig="logback-shards.xml"
process name="node-0-5" numaNode="5" memory="24G" logConfig="logback-shards.xml" 

Vimでどうやってそれを行うことができますか?

4

3 に答える 3

8
:g/node-0/s/memory="\zs\d\{2\}\u\ze"/24G

ステップバイステップ:

  • :g/node-0

    :globalコマンドを使用して、次を含むすべての行を検索しますnode-0

  • s/memory="\zs\d\{2\}\u\ze"/24G

    1. 探すmemory="

    2. ここで試合を開始することにより、実際の試合から除外します\zs

    3. 大文字が続く 2 つの数字に一致\d\{2\}\u

    4. 実際の試合はここで終了\ze

    5. 終了の二重引用符を省略します。

    6. 実際の試合を24G

(質問者の実際のユースケースに合わせてより正確なパターンで編集)

編集

Ingoのコメントを使用:

:g/node-0/s/memory="\zs[^"]*\ze"/24G
于 2012-10-02T13:58:07.673 に答える
1

sed毎回vimを開きたくない場合は、ワンライナーを使用できます。

sed -i '/node-0/s/memory=".\{3\}/memory="24G"/' foo.txt

または、次を使用してvim内から同じコマンドを使用できます。

:%!sed '/node-0/s/memory=".\{3\}/memory="24G"/'
于 2012-10-02T14:02:16.920 に答える
0

すべての行が同じ形式の場合、これを試すことができます:

f1 // 最初の行で "14G" に到達する

Ctrl+ v// ビジュアル ブロック モードを開始

2j // [1]4G、[3]4G、[4]4Gを選択する

r2 // 2 に置き換える

于 2012-10-03T16:20:05.387 に答える