Linux検索grepの定石
🌱 はじめに
Linuxで検索といえば grep
が定番ですが、その威力を最大限に発揮するには 正規表現(regex) を理解しておく必要があります。
この記事では、grepやegrepでよく使う典型的な正規表現パターンを例とともにまとめ、検索作業をスピーディにするためのTIPSを紹介します。
🔤 基本的なメタ文字
任意の1文字 .
grep "c.t" file
→ cat
、cot
、cut
などにマッチ
任意の0回以上の繰り返し *
grep "ab*c" file
→ ac
、abc
、abbc
、abbbc
…
1回以上の繰り返し +
(拡張正規表現)
grep -E "go+gle" file
→ gogle
、google
、gooogle
0回または1回 ?
(拡張正規表現)
grep -E "colou?r" file
→ color
と colour
の両方にマッチ
【情報】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
→ aa
、aaa
、aaaa
🌐 便利な典型パターン
数字だけの行
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
で検証しながら進めるのが安心