Help us understand the problem. What is going on with this article?

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

kanon_pncjv
情報系の院生
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away