MENU

設定ファイルやログから目的の文字列をすばやく見つける検索手順

設定ファイルの中でポート番号の記述を確認したい、ログから特定のエラー文字列が含まれる行に飛びたい——vi/vimの検索機能を使いこなせると、こうした作業が数秒で片付きます。まず動くコマンドを示します。

ノーマルモードで /(スラッシュ)を押して検索文字列を入力し Enter を押すと、カーソルが最初の一致箇所へ移動します。n で次の一致へ、NShift+n)で前の一致に戻れます。

/error
目次

前方検索と後方検索の使い分け

vi/vimの検索には前方(下方向)と後方(上方向)の2種類があります。

/パターン はカーソル位置より下(ファイル末尾方向)に向かって検索します。ファイル末尾に達すると先頭に折り返して続きを探します。?パターン はその逆で、カーソル位置より上(ファイル先頭方向)に向かって検索します。

操作動作
/パターンEnterカーソルより下方向へ検索
?パターンEnterカーソルより上方向へ検索
n同じ方向で次の一致へ移動
N逆方向で次の一致へ移動

ファイルの末尾付近でエラー発生時刻を遡りたい場面では、?error とすれば直前の発生箇所を上方向に追えます。ログ解析では上下どちらに目当ての記述があるかによって使い分けると作業効率が上がります。

検索ハイライトとインクリメンタル検索を有効にする

デフォルトのviでは検索してもマッチ箇所の見た目が変わらないため、ファイル全体に何箇所あるか把握しづらいことがあります。vimには検索体験を向上させる設定が2つあります。ファイルを開いている状態でコマンドモードに切り替えて実行します。

:set hlsearch   " マッチした文字列をハイライト表示
:set incsearch  " 入力中にリアルタイムで候補箇所に移動

hlsearch を有効にするとファイル全体のマッチ箇所が色付きで強調表示されます。一目で件数と分布が把握できるため、ピンポイントで飛ぶだけでなく「何箇所設定されているか確認する」用途にも役立ちます。

incsearch を有効にすると / 以降の文字を入力している最中にカーソルがリアルタイムで移動します。タイプミスで0件になった瞬間にわかるため、長い文字列を検索するときの入力ミスを早期に検出できます。

大文字・小文字を無視して検索する

アプリケーションログには ErrorERRORerror が混在していることがあります。すべてを一度にヒットさせたい場合は ignorecase を使います。smartcase と組み合わせるのが実務上の定番です。

:set ignorecase   " 大文字・小文字を区別しない
:set smartcase    " 検索文字列に大文字が含まれる場合のみ区別する

smartcaseignorecase と組み合わせて初めて機能するオプションです。検索文字列がすべて小文字のときは大文字小文字を無視し、大文字が1文字でも含まれる場合は厳密に一致させます。たとえば /error と入力すれば ErrorERROR もヒットし、/Error と入力すれば Error だけにヒットします。この2つをセットで設定しておくと、大半のケースで意図した通りの挙動になります。

正規表現を組み合わせた実務的な検索パターン

vi/vimの検索には正規表現をそのまま使えます。設定ファイルやログの解析で頻出するパターンをまとめます。

# 行頭にある特定のディレクティブを探す
/^Listen

# コメントアウトされていない行だけを検索(# で始まる行を除外)
/^[^#]

# 数字だけの行を検索
/^[0-9]\+$

# IPアドレスのパターンを検索
/[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}

Apacheの httpd.conf やnginxの設定ファイルのように、コメントが多くて行数が多いファイルでは /^[^#] で有効な設定行だけを拾うと目的の記述に速く辿り着けます。

vi互換の正規表現では {}() をそのまま使うと文字として解釈されるため、\{\}\(\) のようにバックスラッシュが必要です。vimでは検索文字列の先頭に \v を付けると拡張正規表現に近い記法で書けます。

# \v フラグで拡張正規表現ライクに記述する(vim のみ)
/\v[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}

検索ハイライトを消す・設定を永続化する

hlsearch を有効にしていると作業後もハイライトが残り続けます。邪魔になったときは :noh:nohlsearch の短縮形)でハイライトだけを消せます。設定自体はオフにならないため、次の検索では再びハイライトが表示されます。

:noh

ここまで紹介した設定はセッションを閉じると初期化されます。常に有効にするには ~/.vimrc に追記します。

cat >> ~/.vimrc << 'EOF'
set hlsearch
set incsearch
set ignorecase
set smartcase
EOF

既存の .vimrc がある場合は上書きしないよう内容を確認してから追記してください。ファイルが存在しなければ自動で作成されます。

サーバー環境によっては vi コマンドが vim-tiny(機能限定ビルド)を指していることがあります。incsearchhlsearch はtinyビルドでは動作しない場合があるため、機能が利用できない場合はフルビルドのvimをインストールしてください。

# Debian / Ubuntu 系
sudo apt install vim

# RHEL / AlmaLinux / Rocky Linux 系
sudo dnf install vim-enhanced

<PR>この記事に関連するおすすめ書籍

新しいLinuxの教科書 第2版

viでの検索・編集を含め、日々のコマンド操作を体系立てて学び直せる定番書。手を動かして基礎を固めたい方におすすめです。

「コマンドは打てる。次は"現場で通用する型"を最短で身につけたい」——そんなあなたへ。

ネットの断片的なTipsをコピペするだけでは、体系的な運用スキルはなかなか積み上がりません。リナックスマスター.JPの無料メルマガ「リナマガ」では、現場で実際に使うLinuxサーバー運用の考え方を、順を追って実務目線でお届けしています。いま登録された方には、安全なサーバー構築の「型」をまとめた『Linuxサーバー構築入門マニュアル(図解60P)』を完全無料でプレゼント中です。

>> 図解60P『Linux入門マニュアル』を無料で受け取る
(メルマガ登録は10秒・いつでも解除OK)

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

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

コメント

コメントする

目次