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

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

短期間でエンジニアになる方法

・「まったくの初心者だけどエンジニアになりたい!」

・「プログラマーとして転職をしたい!」

という方はリナックスアカデミーの資料を見てみてください。短期間で未経験からエンジニアになることができるスクールとして15年間選ばれ続けてきた理由やノウハウが載った資料です。

エンジニアの入り口に立つために必要な勉強技術の最新動向本当に使えるIT資格学習に役立つ国からの奨励金などの情報が詰まっています。

無料で2,3日中にお手元にお届けします。


資料を見てみる

SNSでもご購読できます。

コメントを残す

*

新入社員エンジニアへの配布用!
自走するエンジニアの心得 小冊子

エンジニア新入社員への教育用小冊子を期間限定配布中です

無料ダウンロードはこちらから ご自身の学習に役立てたい方はこちら