概要
vim,sedで置換前の文字列を使って置換したいときがあります(要するに追記)
解説しているサイトが見つかりづらかったので、備忘録としてまとめておきます
※追記08/03
単に置換対象の文字列を利用して置換したい場合は、以下で可能とのことs/old/new&/
new → 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]:小文字のアルファベット一文字)
上記のように正規表現で検索した文字・文字列を逐次格納できるので使い方の幅が広がります