メインコンテンツへスキップ

Linux検索grepの定石

🌱 はじめに

Linuxで検索といえば grep が定番ですが、その威力を最大限に発揮するには 正規表現(regex) を理解しておく必要があります。
この記事では、grepやegrepでよく使う典型的な正規表現パターンを例とともにまとめ、検索作業をスピーディにするためのTIPSを紹介します。


🔤 基本的なメタ文字

任意の1文字 .

grep "c.t" file

catcotcut などにマッチ


任意の0回以上の繰り返し *

grep "ab*c" file

acabcabbcabbbc


1回以上の繰り返し +(拡張正規表現)

grep -E "go+gle" file

goglegooglegooogle


0回または1回 ?(拡張正規表現)

grep -E "colou?r" file

colorcolour の両方にマッチ

【情報】grep では -E オプションを付けると拡張正規表現が使えます(egrep 相当)。


🔢 文字クラスと範囲

特定の1文字にマッチ []

grep "gr[ae]y" file

gray または grey

文字範囲

grep "[0-9]" file

→ 数字1文字

grep "^[A-Z]" file

→ 行頭が大文字の行


否定 [^ ]

grep "[^0-9]" file

→ 数字以外の1文字


🏷️ アンカー(位置指定)

行頭 ^

grep "^error" file

error で始まる行

行末 $

grep "end$" file

end で終わる行

アンカーを使うと「行の先頭だけ」「末尾だけ」を的確に検索できます。


📏 繰り返しの回数指定

grep -E "a{3}" file

aaa

grep -E "a{2,4}" file

aaaaaaaaa


🌐 便利な典型パターン

数字だけの行

grep -E "^[0-9]+$" file

メールアドレスらしき文字列

grep -E "[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,}" file

IPv4アドレス

grep -E "([0-9]{1,3}\.){3}[0-9]{1,3}" file

空行

grep "^$" file

空白行を含めず表示(逆マッチ)

grep -v "^$" file

正規表現だけで完全に正しいメールやIPを保証するのは難しいですが、典型的な検出には十分です。


⚡ TIPS

  • 確認用に色付き表示

    grep --color=auto -E "pattern" file
    
  • 正規表現をテストしたいとき

    echo "test123" | grep -E "[0-9]+"
    
  • 複数パターン検索(OR)

    grep -E "error|fail|fatal" logfile
    

ログ解析ではこの「ORパターン」が大活躍します。


🎯 まとめ

  • .*[]^$ など基本メタ文字を押さえる

  • -E で拡張正規表現を使いこなす

  • 典型パターンを覚えるとログ解析やデータ抽出が一気に効率化

  • 複雑な正規表現を作るときは echo で検証しながら進めるのが安心