vi(vim)で文字列を検索・置換する方法|ハイライトの消し方や次への移動も


図解60p「Linuxサーバー構築入門マニュアル」無料
登録10秒/自動返信でDL/合わなければ解除3秒
HOMELinux技術 リナックスマスター.JP(Linuxマスター.JP)LinuxtipsLinuxtips, テキスト処理 > vi(vim)で文字列を検索・置換する方法|ハイライトの消し方や次への移動も
「膨大なログファイルや設定ファイルを開いたものの、目当ての行が全く見つからない...」
「検索して黄色くハイライトされた色を消す方法が分からない」
Linuxを触り始めたばかりの方が、vi(vim)エディタで必ず直面する悩みです。

この記事では、Linuxの標準エディタであるvi(vim)で文字列を検索・置換する実践的なコマンドを解説します。基本的な検索から、次の候補への移動、ハイライトの消し方まで、現場のエンジニアが息をするように使っている必須の操作手順をまとめました。

1. viエディタでの基本的な検索コマンド(/ と ?)

viエディタで検索を行うには、必ず「コマンドモード(文字入力ができない状態)」になっている必要があります。もし文字入力中(挿入モード)であれば、一度 Esc キーを押してください。

下方向(ファイルの終わりに向かって)検索する

現在のカーソル位置から下に向かって検索するには、/(スラッシュ) を入力してから検索したい文字列を打ち込み、Enter を押します。

/error

これで、ファイル内にある「error」という文字列がハイライトされ、カーソルが移動します。

上方向(ファイルの先頭に向かって)検索する

逆に、現在のカーソル位置から上に向かって検索したい場合は、?(ハテナ) を使います。ログファイルの末尾から過去に遡ってエラーを探す際などによく使います。

?warning


2. 次の候補・前の候補へ移動する(n と N)

検索して1つ目の文字列が見つかった後、「そこじゃない、次のエラーを見たい」という場合は、いちいち /error と打ち直す必要はありません。

n キー(小文字): 検索したのと同じ方向に向かって、次の候補へ移動します。
N キー(大文字): 検索したのとは逆方向に向かって、前の候補へ戻ります。

/ で下方向に検索した場合、n を押すたびに画面が下へ下へと進んでいきます。

3. 検索のハイライト(色)を消す方法

検索が終わった後も、見つかった文字列がずっと黄色などでハイライト(強調表示)され続けて、画面が見づらくてイライラした経験はないでしょうか?
vi_vi_search01.png このハイライトを消すには、以下のコマンドを打ち込んで Enter を押します。

:nohlsearch または :noh

これは「no highlight search」の略です。現場では :noh と打つのが一般的ですので、ぜひ手癖にしておきましょう。

4. 大文字・小文字を区別せずに検索する

viエディタのデフォルト設定では、「Error」と「error」は別の文字として厳密に区別されます。大文字小文字を無視して検索したい場合は、検索文字列の後ろに \c を付けます。

/error\c

または、一時的に設定を変更する :set ignorecase コマンドを実行してから検索する方法もあります。(元に戻すときは :set noignorecase です)

5. 現場で役立つ:文字列の一括置換

検索だけでなく、「ファイル内の特定の文字列を一気に別の文字列に書き換えたい(置換したい)」という場面も多々あります。
ファイル全体の文字列を一括置換するには、以下のコマンドを使います。

:%s/置換前の文字列/置換後の文字列/g

例えば、ファイル内にある「http」をすべて「https」に一括置換したい場合は以下のようになります。

:%s/http/https/g

1件ずつ確認しながら置換する(c オプション)

一括置換は便利ですが、意図しない場所まで書き換えてしまうリスクがあります。末尾に c(confirm)を付けると、1件ごとに「置換しますか?」と確認しながら実行できます。

:%s/http/https/gc

実行すると各マッチ箇所で y(置換する)/ n(スキップ)/ q(中止)などのキー入力を求められます。本番環境の設定ファイルを編集する際は、このオプションを付ける習慣をつけましょう。

特定の行範囲だけ置換する

ファイル全体ではなく、特定の行範囲だけを置換したい場合は、% の代わりに行番号を指定します。

# 10行目から20行目の範囲だけ置換する :10,20s/http/https/g

検索文字列が見つからない場合のエラー(E486: Pattern not found)

E486: Pattern not found: error

このエラーは、検索した文字列がファイル内に1件も存在しないことを意味します。パニックになる必要はなく、単純に「該当なし」というメッセージです。スペルミスや大文字・小文字の違いがないか確認してください。

本記事のまとめ(検索コマンド早見表)

やりたいこと コマンド(キー操作)
下に向かって検索 /検索文字列
上に向かって検索 ?検索文字列
次の候補へ進む n (小文字)
前の候補へ戻る N (大文字)
ハイライト(色)を消す :noh
大文字/小文字を無視して検索する /検索文字列\c
ファイル全体の一括置換 :%s/置換前/置換後/g
1件ずつ確認しながら置換する :%s/置換前/置換後/gc
行範囲を指定して置換する :開始行,終了行s/置換前/置換後/g

設定ファイルの編集やコマンド操作で、冷や汗をかいていませんか?

viエディタの操作ミスや、Linuxの基礎知識がないまま本番サーバーを触ると、「設定ファイルの中身を消してしまった」「システムが起動しなくなった」という致命的なトラブルを引き起こします。
ネットの切れ端の情報をコピペするだけでなく、現場で通用する安全なLinuxサーバー構築の「型」を体系的に身につけたい方へ、『Linuxサーバー構築入門マニュアル(図解60P)』を完全無料でプレゼントしています。

「独学の時間がもったいない」「プロから直接、現場の技術を最短で学びたい」という本気の方には、2日で実務レベルのスキルが身につく【初心者向けハンズオンセミナー】も開催しています。



無料プレゼント
図解60p「Linuxサーバー構築入門マニュアル」
独学で詰まる前に、“型(手順書)”で最初の環境構築をサクッと終わらせましょう。
登録10秒/自動返信でDL/合わなければ解除3秒
無料で受け取る ※メールアドレスだけでもOK(必須項目は最小限)

宮崎 智広

この記事を書いた人

宮崎 智広(みやざき ともひろ)

株式会社イーネットマーキュリー代表。現役のLinuxサーバー管理者として15年以上の実務経験を持ち、これまでに累計3,100名以上のエンジニアを指導してきたLinux教育のプロフェッショナル。「現場で本当に使える技術」を体系的に伝えることをモットーに、実践型のLinuxセミナーの開催や無料マニュアルの配布を通じてLinux人材の育成に取り組んでいる。

<<関連記事>>
・\x(¥x)から始まるUnicode文字列を読めるようにする
・Zip形式で圧縮されたファイルから特定の文字列を含む行を抽出する
・MIMEでエンコードされたテキストを読めるように変換する
・テキストを他のOSとの間でやりとりできるように変換する
・viで文字に色をつけるには

図解60pのLinux無料マニュアル
登録10秒/自動返信でDL
無料で受け取る