vimのsedで置換前の文字列を用いて置換する


概要

vim,sedで置換前の文字列を使って置換したいときがあります(要するに追記)
解説しているサイトが見つかりづらかったので、備忘録としてまとめておきます

※追記08/03

単に置換対象の文字列を利用して置換したい場合は、以下で可能とのこと
s/old/new&/
old → newold

やり方

例えばvimでsedを使って"old"を"new"に置換するときは以下のようにします
(%:ファイル全体が対象,g:該当部分全てが置換対象,C:置換対象に対して逐一確認をする)

:%s/old/new/gc
old → new

これを、置換前の文字列"old"を消さずに追記したいときは以下のようにします

:$s/\(old\)/new\1/gc
old → newold
\( \)で囲まれた文字列は変数として格納され、"\+数字" で参照できます(\1~\9まである模様)

また、正規表現と組み合わせると

before.txt
a b c d e f g

:$s/\([a-z]\)/\11/gc

after.txt
a1 b1 c1 d1 e1 f1 g1

([a-z]:小文字のアルファベット一文字)
上記のように正規表現で検索した文字・文字列を逐次格納できるので使い方の幅が広がります