grep -fオプションの使い方を完全ガイド!パターンをファイルから読み込んで検索する方法
生徒
「grepでたくさんのキーワードを一気に検索したいとき、どうすればいいですか?」
先生
「そんなときは、-fオプションを使うと便利ですよ。」
生徒
「-fオプションって何ですか?初めて聞きました。」
先生
「これは、検索キーワードをファイルに書いておいて、そのファイルを使ってgrepする機能です。実際にやってみましょう!」
1. grepコマンドとは?
grepは、Linuxでテキストファイルの中から特定の文字列を検索するコマンドです。「検索する文字列(キーワード)」を指定すると、そのキーワードを含む行だけを表示してくれます。
たとえば、大量のログファイルの中から「error」や「warning」といった文字を探すときに使われます。
2. -fオプションとは?
-fオプションは、「検索するキーワードをテキストファイルに書いておいて、それを使ってgrepする」ためのオプションです。
つまり、たくさんのキーワードをまとめて検索したいときにとても便利です。検索キーワードが数十個あるときでも、1回のgrepで済むんです。
3. grep -fオプションの使い方
以下のようなキーワードが書かれたファイルを用意します(たとえば「keywords.txt」という名前)。
apple
banana
cherry
この「keywords.txt」を使って、別のファイルの中からこれらの単語を探すには、次のように書きます。
grep -f keywords.txt fruits.txt
banana
cherry
この例では、「fruits.txt」の中に「banana」と「cherry」が含まれていたので、その行が表示されました。
4. -fオプションのファイルの書き方
-fオプションで使うファイルは、1行につき1つのキーワードを書いてください。
スペースは入れずに、1行に1単語です。空白が入っていると、うまく検索できないことがあります。
5. grep -fと通常のgrepの違い
通常のgrepでは、次のように検索します。
grep "apple" fruits.txt
apple
でも、検索キーワードがたくさんあると、次のように長くなってしまいます。
grep -e "apple" -e "banana" -e "cherry" fruits.txt
こういうときに-fを使うと、キーワードを別ファイルにまとめられるので便利なんです。
6. 応用:grep -fと-iや-nの組み合わせ
-fは他のオプションと一緒に使うこともできます。たとえば、大文字小文字を区別せずに検索したいときは-iを使います。
grep -i -f keywords.txt fruits.txt
また、何行目に該当したのかも知りたい場合は-nを使います。
grep -n -f keywords.txt fruits.txt
2:banana
5:cherry
7. grep -fで検索対象が空だとどうなる?
-fで指定したファイルが空(中身が何も書かれていない)だった場合、grepは何もヒットせず、何も表示しません。
ファイルの中身が正しく書かれているか、事前に確認するようにしましょう。
8. よくある間違い:スペースと改行
検索キーワードを書いたファイルの1行目の最後に空白が入っていると、意図しない動作をすることがあります。
例えば、次のようなファイルはNGです。
apple
banana
cherry
この場合、appleのあとにスペースがあるため、ヒットしないことがあります。不要な空白は削除しておきましょう。
9. 他のコマンドと組み合わせて使う例
たとえば、findコマンドと組み合わせて、複数ファイルをまとめて検索することも可能です。
find . -name "*.log" -exec grep -f keywords.txt {} \;
この例では、カレントディレクトリ以下のすべての「.log」ファイルを対象に、keywords.txtに書かれたキーワードで検索しています。