viのテキスト置換方法【実際の画面でわかりやすく解説】

  • このエントリーをはてなブックマークに追加
  • Pocket

テキストエディタにはよっぽど原始的なものでない限り置換機能がついている。当然、Linuxのvi(vim)でも文字列の置換はできる。

このページではviでの文字列置換についてお伝えした。参考にしていただければと思う。

viでの基礎的な置換

テキストの置換

メモ帳を始めとしたテキストエディタには基礎機能として「指定の文字列を指定の文字列へ置き換える機能」がそなわっている。この「指定の文字列を指定の文字列へ置き換える機能」を一般的に「置換」とよばれる。ご存知の方がほとんどだろうし、使ったこともあるだろう。

vimもテキストエディタであり置換機能が用意されている。vimは高機能なエディタであり、メモ帳などよりも高度な置換を行うことが可能となっている。「置換」は一般的にはファイル全体や一部を指定して文字列を一斉に置き換える時に使用される。

プログラムの変数などの名前を一斉に変更したい場合などに重宝する機能だ。

viでの置換方法

置換作業はコマンドモードで行う。ノーマルモードの状態で「:」を押してみよう、一番下の行が変化しコマンドモードに移行する。コマンドモードの状態で「%s/置換対象文字列/置換後文字列/g」とするとファイル内の文字を置き換えてくれる。

例えば以下のような内容のファイルがあるとする。

default 

置換の書式としては

:s/置換対象文字列/置換後文字列/

が最も基礎的な置換となる。カーソル行で最初に合致した文字列を置き換える。

今回の例では

:s/aaa/eee/

と指定してみた。最初にある「aaa」が「eee」に置き換わる。

置換後

行全体の置換

:s/置換対象文字列/置換後文字列/g

gを指定すると現在のカレント行にある全ての置換対象文字列を置換後文字列に置き換えてくれる。

s-aaa-eee-g

この例では

:s/aaa/eee/g

になっている。

ファイル全体の置換

しかし多くの場合ファイル全体を指定して置換したいというのが一般的だろう。「:」のあとに「%」を指定するとファイル全体を指定することになる。

:%s/置換対象文字列/置換後文字列/g

%置換

:%s/ccc/eee/g

「aaa」にカーソルを置いた状態から「ccc」を「eee」に置換した。

区切り文字を変える

区切りに「/」以外を使用することも可能となっている。パスを指定するときに便利だ

以下の内容のファイルが存在しているとして

partition

:%s;/usr/bin;/bin;g

「;」を仕切りにして使用する。

ps-usr_bin-bin-g

この場合エスケープ文字でエスケープするという手段もある。

:%s/\/usr\/bin/\/bin/g

とすると同じ効能が得られる。

置換前の確認

置換前に確認をとりたい場合は「c」を追加する。

:%s/置換対象文字列/置換後文字列/gc

gc

行範囲での指定

行範囲を指定する場合「%」の代わりに行番号を指定する。

:1,10 s/置換対象文字列/置換後文字列/g

1-10s-g

複雑な置換

vimのデフォルトの正規表現は「なまり」があるので、それを緩和するために「\v」を追加して置換動作をする。

:%s/\v置換対象文字列/置換後文字列/g

とすると多少正規表現のなまりが解消される。

ワイルドカードを使用したような置換

fstabを開いてみた。通常あり得ないが、例として「defaults」になるべき部分が「default」となっている。正しい表記に正規表現を交えて置換してみよう。

:%s/\vdef\w*lt/defaults/g

fstab-default

置換を実行してみよう。

fstab-defaults

主な正規表現

正規表現を利用すると、曖昧な文字列を明確にマッチングできる「ワイルドカードを使用したような置換」で使用した記号的な文字列も正規表現のものだ。

  • . なにかしらの一文字にマッチ
  • ^ 行頭にマッチ
  • $ 行末にマッチ
  • \w なにかしらの文字にマッチ
  • \n 改行にマッチ
  • \t タブにマッチ
  • \s 空白にマッチ
  • [0-9] 0から9の一文字にマッチ
  • [a-z] aからzの一文字にマッチ
  • [abc] abcのどれかの一文字にマッチ
  • * 正規表現、直前文字の0回以上の繰り返しにマッチ。

マッチ条件が正しいか確かめたい

最初は正規表現に慣れないため不安になる方もいらっしゃるかもしれないが、単純に正規表現が正しく文字にマッチするかを確かめたいときは、ノーマルモードの状態で「/」を押して「文字列検索」してみるとよい、同じ正規表現が使用可能となっているので確認することができる。

詳しくは下記ページが参考になるだろう。

まとめ

このページではviでのテキスト置換の方法についてまとめてお伝えした。はじめのうちは混乱すると思うが、すぐに慣れるはずだ。

  • このエントリーをはてなブックマークに追加
  • Pocket

このページの続きや関連ページは下記から一覧で確認できます。

IT講師に興味はありませんか?

・「今までIT講師をやってきたが、更に多くの講義を行いたい」

・「エンジニアとしてやってきたが講師業に魅力を感じている」

・「講師として活躍するためにベースとなる知識を知りたい」

・「様々な分野や言語の講師にチャレンジしてみたい」


という方はぜひIT講師募集のページをご覧ください。


リスキルテクノロジーでは「受講している方々にITを好きになってもらう」ことを目標に、同じ目標に向かって歩んで行ける講師の方を常に探しています。


システム開発やインフラ構築などのエンジニアリング経験を活かし、新入社員などの未経験者や経験の浅い初学者の方々に対してITトレーニングを行っていただくことになります。


テキストやカリキュラムは事前に用意されており、それらを元に講義を進めていくため、IT講師をはじめて実施する方でも安心してトレーニングを実施できます。


IT講師募集のページを見る

SNSでもご購読できます。

コメント

  1. qqq より:

    vimのデフォルトの正規表現は訛があるので、それを緩和するために「\v」を追加して置換動作をする。

    :%s/\v置換対象文字列/置換後文字列/g

    とすると多少正規表現のなまりが解消される。

    漢字と平仮名が混在している(他のセクションでは平仮名)

    1. リカレントテクノロジー より:

      ご指摘いただきありがとうございます。
      表記ゆれがありましたので訂正いたしました。

      引き続き、ご愛読のほど、よろしくお願いいたします。

リカレントテクノロジー へ返信する コメントをキャンセル

*

未経験からの育成制度も充実
IT講師に興味はありませんか?

リスキルテクノロジーでIT講師の積極募集を開始! 経験・未経験問わずご応募可能。育成制度で講師スキル向上も目指せます

IT講師に応募する