Linuxで特殊文字をそのまま検索!fgrepコマンドの使い方と実践例

Linuxのgrepコマンドを使ってファイル内の文字列を検索するとき、意図せず正規表現が働いてしまって困ったことはありませんか?
たとえば「.」「*」「[」「^」などの記号を含む文字列を探したいだけなのに、検索がうまくいかない――そんなときに便利なのが fgrep コマンドです。

この記事では、特殊文字を無視して文字列をそのまま検索したい場面で大活躍する「fgrep」について、基本の使い方から実践的な活用方法まで、わかりやすく解説していきます。


fgrepとは?grepとの違い

fgrep は、grep コマンドの仲間で、文字列検索を行うツールの一種です。
最大の特徴は、正規表現を使わず、入力された文字列をそのまま(リテラルとして)検索するという点です。

コマンド正規表現の扱い目的
grep使う柔軟なパターンマッチ
egrep拡張正規表現を使う複雑なパターンマッチ
fgrep使わないそのままの文字列を検索

たとえば、以下のような文字列を検索する場合を考えてみましょう:

(エラーコード: 404)

通常のgrepでこの文字列を検索しようとすると、括弧やコロンが正規表現として解釈され、検索に失敗してしまうことがあります。
こうしたケースで、fgrepを使えば、これらの記号をエスケープせずにそのまま検索できます。


基本的な使い方

fgrep の基本構文はとてもシンプルです:

fgrep '検索文字列' ファイル名

例1:記号を含む行を検索する

次のようなログファイル sample.log があるとします:

エラーコード: 404
正常終了しました。
Warning: Disk usage over 90%

「エラーコード: 404」という行をそのまま検索するには以下のようにします:

fgrep 'エラーコード: 404' sample.log

出力:

エラーコード: 404

ポイント:grepで同じことをしようとすると、コロンや数字の扱いがややこしくなり、正規表現をエスケープする必要が出てきます。fgrepではその必要がありません。


fgrepとgrep -Fの違いと共通点

実は、fgrepgrep -F とまったく同じ動作をします。

grep -F '検索文字列' ファイル名

この -F オプションは「fixed string(固定文字列)モード」を意味し、正規表現ではなくリテラル文字列として扱うオプションです。

そのため、Linuxの一部のディストリビューションでは fgrep は非推奨(deprecated)とされており、将来的には grep -F の使用が推奨される流れになっています。

結論:

  • 今後のスクリプトでは grep -F を使うとより互換性が高くて安心。
  • ただし、学習や読みやすさの面で fgrep は今でも十分役に立ちます。

実用例:設定ファイルの中からURLを検索したい

ある設定ファイルに、以下のような行があるとします:

url=https://example.com/path/to/resource?token=abc123

この文字列をまるごと検索したいときに、fgrep を使えば一発です。

fgrep 'url=https://example.com/path/to/resource?token=abc123' config.txt

普通の grep だと、?=/ などの記号が正規表現の意味を持ってしまい、正確なマッチが難しくなります。


複数の検索キーワードを使いたい場合

fgrep(または grep -F)では、-f オプションを使って、複数の検索語句を一括で探すこともできます。

使い方:

  1. キーワードをテキストファイルにまとめる(例:keywords.txt
エラーコード: 404
Warning: Disk usage
正常終了
  1. fgrepで一括検索:
fgrep -f keywords.txt sample.log

これで、sample.log の中から keywords.txt にあるすべての行にマッチするものを検索してくれます。


grepとの比較で注意したい点

比較項目fgrepgrep
特殊文字の扱い無視(リテラル文字列)正規表現として解釈される
柔軟性低い高い
学習コスト低い(初心者向け)正規表現の理解が必要
スクリプト用途簡易的なチェック向け条件付き処理に便利

fgrepの代替としてのgrep -Fの使い分け

スクリプトや自動化用途でのポイント:

  • fgrep:わかりやすさ・書きやすさを重視したいとき
  • grep -F:将来的な互換性を意識したいとき

特に他人と共有するスクリプトやCI/CD環境で使うなら、grep -F の方が無難です。


まとめ:特殊文字を気にせず検索したいならfgrepが便利!

fgrep は、正規表現を避けて、記号を含むそのままの文字列を検索したいときに非常に便利なコマンドです。
システムログの確認、設定ファイルのパラメータチェック、複数語句の一括検索など、日々のLinux作業で大いに役立ちます。

ただし、将来的には grep -F を使うようにしておくと安心です。
いずれの方法でも、「エスケープで悩まされない」 というのが最大の利点ですね。

タイトルとURLをコピーしました