Linuxコマンド · 1 min read · Sep 14, 2025
初心者のためのLinux fgrepコマンドチュートリアル(例付き)
grepはよく知られたLinuxコマンドですが(すでに詳細に説明しました)、このツールには2つの異なるバリアントが存在することをご存知ですか?はい、それはegrepとfgrepです。このチュートリアルでは、後者(fgrep)について、わかりやすい例を使って説明します。しかし、その前に、このチュートリアルで言及されているすべての例と指示は、Ubuntu 16.04LTSでテストされていることを言及しておく価値があります。
Linux fgrepコマンド
公式ドキュメントを見てみると、grepコマンドのmanページにはfgrepはgrep -Fに他ならないと書かれています。また、fgrepやegrepのようなバリアントは、後方互換性のためにのみ提供されているとも書かれています。これらの詳細については、このチュートリアルの後半で触れます。
その間に、fgrepの構文は以下の通りです(grepの構文と同じです):
grep [OPTIONS] PATTERN [FILE...]そして、grepコマンドのmanページがこのツールをどのように説明しているかは以下の通りです:
grepは、指定されたPATTERNに一致する行を含む名前付き入力FILEを検索します。ファイルが指定されていない場合、またはファイル「-」が指定された場合、grepは標準入力を検索します。デフォルトでは、grepは一致する行を出力します。以下のQ&A形式の例は、fgrepがどのように機能するかをより良く理解するのに役立つでしょう。
Q1. fgrepはgrepやegrepとどう違うのですか?
fgrepコマンドは、PATTERNを改行で区切られた固定文字列のリストとして解釈する点で、grepやegrepとは異なります(正規表現ではなく)。
fgrepはgrep -Fと同じと言われているので、StackExchangeで専門家がgrepの-Fオプションをどのように説明したかは以下の通りです:
`-F`スイッチはgrepを異なるモードに切り替え、一致させるパターンを受け入れますが、そのパターンを行ごとに1つの検索文字列に分割し、特別なパターンマッチングを行うことなく、文字列のいずれかに対してOR検索を行います。Q2. fgrepの使い方は?
fgrepの使い方を理解するために、まず基本的な例を見てみましょう。例えば、以下の内容を含むファイル(file1)があるとします:

そして、file1内で検索したい単語のリストを含む別のファイル(words.txt)があるとします。

では、fgrepを使ってこの検索を実行する方法は以下の通りです:
fgrep -f words.txt file1
見ての通り、見つかった単語は赤でハイライトされています。さて、皆さんの中には、grepやegrepもこの場合に同様のことをするだろうと主張する方もいるかもしれませんが、fgrepはどう違うのでしょうか?
まず、はい、あなたは正しいです。grepとegrepコマンドも同様の出力を生成します:

しかし、file1とwords.txtが以下の内容を含む場合(単語内の特殊文字に注意してください):

ここでは、egrepとgrepはすべての単語を見つけることができません:

しかし、fgrepは意図した通りに機能します:

Q3. fgrepとgrepの間に本当に違いはないのですか?
公式ドキュメントによれば、fgrepとgrep -Fコマンドの間に違いはありません。しかし、2つのツールの間には、使用する文字列マッチングアルゴリズムに関する1つの大きな違いがあると言われています。fgrepはAho-Corasickアルゴリズムを使用するのに対し、grepはCommentz-Walterの修正版を使用します。
「これは、grepが最悪の場合O(mn)の複雑さを持つのに対し、fgrepは最悪でもO(m+n)であることを意味します」とStackExchangeフォーラムの専門家は言います。
結論
明らかに、fgrepコマンドは理解しやすく、使いやすいです。fgrepとgrep -Fの違いについては、Q3で既にポイントを挙げましたが、この問題は多くのユーザーにとって気にする必要はないと思います。疑問がある場合やfgrepに関する質問がある場合は、下にコメントを残して私たちに共有してください。
新しい投稿を受信箱で受け取る
スパムはありません。いつでも購読を解除できます。