grep -eオプションの使い方|複数の検索ワードを同時に見つけよう!初心者向け解説
生徒
「Linuxで複数の単語を一度に検索する方法ってありますか?」
先生
「はい、そのときに便利なのがgrepコマンドの-eオプションです。複数の検索パターンを同時に指定できますよ。」
生徒
「パターンってなんですか?難しそう…」
先生
「難しくありませんよ。“探したい単語や文字列”のことをパターンと呼ぶだけなんです。実際に例を見ながら、grep -eオプションの使い方を学んでいきましょう!」
1. grep -eオプションとは?
grepコマンドは、Linuxでよく使われる文字列検索ツールです。その中でも-eオプションは、複数の検索キーワード(パターン)を指定するときに使います。
たとえば、「error」「fail」「warning」というような異なる単語を一気に探したいとき、-eを使えばすべてまとめて検索できます。
2. grep -eの基本的な使い方
基本の書き方はこちらです。
grep -e パターン1 -e パターン2 ファイル名
このように-eを複数回指定することで、複数のキーワードを検索できます。
それでは、実際にファイルを使って検索してみましょう。
次のようなファイルがあるとします。
cat memo.txt
apple
banana
cherry
grape
orange
lemon
このファイルの中から「apple」と「lemon」という単語を探したい場合は、次のように実行します。
grep -e apple -e lemon memo.txt
apple
lemon
grepは、それぞれの-eで指定されたパターンを探してくれて、どちらかに一致する行を表示します。
3. -eオプションを使う理由とは?
-eを使わなくても、次のようにパイプ記号(|)を使ってパターンを1つにまとめても似たようなことができます。
grep 'apple\|lemon' memo.txt
apple
lemon
ただし、この書き方は正規表現というルールを理解していないと、間違いやすくなります。初心者には少しわかりづらいです。
その点、-eならひとつひとつキーワードを並べるだけなので、ミスが起きにくく読みやすいという利点があります。
4. grep -eでメールやログから特定の行を探す
Linuxでよくある実用例として、ログファイルから特定のキーワードを探すという場面があります。
たとえば、「ログファイル(log.txt)」の中から「ERROR」や「WARNING」という文字を検索したい場合、次のように使います。
grep -e ERROR -e WARNING log.txt
2023-09-16 10:01:15 ERROR Connection failed
2023-09-16 10:02:08 WARNING Low disk space
このように、-eを使えば、複数のトラブルメッセージも一気に探せます。
5. -eオプションの応用:他のオプションと組み合わせて使う
grepの-eオプションは、-iや-nなどの他のオプションと組み合わせて使うこともできます。
- -i:大文字・小文字を区別しない
- -n:行番号を表示する
- -r:フォルダ内を再帰的に検索する
たとえば、ログファイルから「error」や「warning」という単語を、大文字小文字を無視して検索し、さらに行番号も表示したいときはこう書きます。
grep -i -n -e error -e warning log.txt
15:2023-09-16 10:01:15 ERROR Connection failed
26:2023-09-16 10:02:08 Warning Low disk space
6. grep -eと-fの違いとは?
-eはコマンドラインで直接検索パターンを書く方法です。それに対して-fオプションは、検索キーワードをファイルに書いておいて、そのファイルを指定する方法になります。
たとえば、次のように検索したいキーワードをkeyword.txtに書いておきます。
cat keyword.txt
apple
lemon
このファイルを使って検索するときは、次のようにします。
grep -f keyword.txt memo.txt
apple
lemon
大量の検索語があるときは、-fを使ったほうが便利です。-eは少ない語数のときに使うとすっきりします。
7. grep -eは正規表現も使える
grep -eでは、普通の単語だけでなく、正規表現(せいきひょうげん)という特別な書き方も使えます。これは、あるパターンに当てはまる文字列を柔軟に探すためのルールです。
たとえば、次のように数字だけを含む行を探すには、[0-9]という記号を使って指定できます。
grep -e '[0-9]' sample.txt
123abc
hello42
456
ただし、初心者のうちは、まずは単語検索で基本をしっかり身につけるのがおすすめです。