16

Vim で正規表現をランダムに生成された数値に置き換えることは可能ですか? 置換される (乱数) 番号は、正規表現に一致するパターンごとに異なる必要があります。これが私が必要とするものの例です。

入力ファイル:

<a>XYZ</a>
<a>XYZ</a>
<a>XYZ</a>
<a>XYZ</a>

XYZ を乱数に置き換えた後、出力は次のようになります。

<a>599</a>  
<a>14253</a>    
<a>1718</a>
<a>3064</a>
4

2 に答える 2

25

vim で少し perl を使用してもかまわない場合は、次を使用できます。

:%! perl -pne 's/XYZ/int(rand 1000)/ge'

編集:@hobbes3による提案に従って、特定の行で無制限の置換を許可するように更新されたので、

XYZ XYZ
XYZ XYZ XYZ 
XYZ XYZ XYZ XYZ XYZ XYZ
XYZ XYZ

のようなものになります

86 988
677 477 394 
199 821 193 649 502 471
732 208
于 2012-10-04T20:04:36.427 に答える
6

これを試してみてください: 以下のコードをバッファに入れてからソースにします ( :source %)。

let rnd = localtime() % 0x10000 

function! Random() 
  let g:rnd = (g:rnd * 31421 + 6927) % 0x10000 
  return g:rnd 
endfun 

function! Choose(n) " 0 n within 
  return (Random() * a:n) / 0x10000 
endfun 

次に、次のことができます。

:s_\(<a>\).*\(</a>\)_\1\=Choose(line('.')*100).\2_
于 2012-10-04T19:59:52.367 に答える