回答:
少し調べてみると、vimはスクリプトを作成せずに1つのコマンドで実行できることがわかりました。たとえば、次のすべての数値に50を追加するには、次<obj param="
を使用できます。
:%s@<obj param="\(\d\+\)@\='<obj param="' . (submatch(1) + 50)@g
分解させてください。
:
vimでコマンドラインモードを開始/指定する一般的な方法です。
%
文書全体の範囲内を意味します。1,50
代わりに、最初の50行内でそれを行うなど、番号範囲を設定できます。
s
代替の省略形です(必要に応じて単語全体を書くことができます)
@
区切り文字です。探しているものに含まれていない限り、他の文字を使用できます。3回使用するだけです。(構文はに似ていsed
ます。)
デリミタ@の次の出現まではすべて、検索する正規表現パターンです。この場合は、任意の桁数であるが<obj param="
続き\d\+
ます。単一のREGの元のように後方参照にマッチするグループとして数字のこのシーケンス全体が設定している、またはVimのコマンド。\(
\)
\1
submatch
次に、区切り文字@
は、置換テキストとして続くものをマークします。
ここ\=
での先頭にあるのは、ここで重要なreg exパターンまたは文字列ではなく、評価された式の結果を置き換えることです。
次に'<obj param="'
、置換テキストの開始点があります。.
次のこれは、文字列を連結するためのVimの機能です。
submatch(1)
置換コマンド内でのみ使用できるvim組み込み関数であり、正規表現と同じ文字列を返します \1
。submatch(2)
正規表現\2
などに相当するものに使用します。(\0
一致したパターン全体ですが、ここでは必要ありません。)検索パターンの\(
and \)
は、としてカウントされるものをマークするために使用されsubmatch(1)
ます。
したがって、検索パターンに(submatch(1) + 50)
続く数字が<obj param="
形成する数字に50を加算した結果が得られます。
区切り文字@
は、置換テキストの終わりを示すために再び使用されます。
フラグg
は、置換をグローバルにするために使用されます。各行の最初のインスタンスのみを置き換えたい場合は、これを省略できます。
おそらく、そこから異なる数値を追加する方法、減算する方法、除算する方法などを見つけることができます。
Emacs(バージョン23以降):regexp replacement\,
で任意のLispコードを実行するために使用します。たとえば、数字を2乗するには、次のようにします。
M-x replace-regexp
param="\([0-9]+\)"
param="\,(* \#1 \#1)"
Vim:で置換テキストを開始します\=
(を参照:help sub-replace-special
)。たとえば、数値を二乗するには:
s!param="\([0-9]\+\)"!\='param="'.submatch(1)*submatch(1).'"'!
いくつかのエディターでは、マクロを使用してこのようなことを行うことができます。一致する数だけマクロを繰り返します。
vimを使用してそれを行うことができます。ファイルを開いてマクロを記録するだけです。例:任意の番号を検索
/[0-9]{1,}
次に、qとa(レジスタaにマクロを保存)を押します。その後、Ctrl-X(数字を1ずつ増やす)を押し、その後n(次の検索結果用)を押します。それが終わったら、もう一度qを押してマクロを保存します。これで、@ + aを押して次の番号にマクロを適用できます。これにより、現在の番号が変更され、次の番号にジャンプします。それを繰り返すかx @ aを使用することで、それをx回繰り返すことができます。
まあ、その説明はそれがどのように行われるかを示すのに十分でないかもしれません。vimのマクロメカニズムを説明するチュートリアルを参照してください。
vim
とemacs
この種のものを行うことができますが、それは、スクリプトを書くのではなく、単一のコマンドを使用して必要な場合があります。