【Linux】grepコマンドの使い方|開発業務でよく使うオプションまとめ

Linux

Linux環境でのシステム開発業務において、
ログファイルやソースコードなど、ファイルの中から特定の文字列を検索したい場面がよくあります。

そのようなときに便利なのが、grep コマンドです。

  • ログファイルからエラーメッセージを検索する
  • ソースコードから関数名や変数名を検索する

といったことができるため、作業の効率化には欠かせないコマンドです。

ただ、grep コマンドには様々なオプションがあり、
用途によって使い分ける必要があります。

この記事では、grep コマンドの基本的な使い方から、
開発業務でよく使うオプションまでを具体例とセットでまとめています。

grepコマンドとは

grep コマンドは、ファイル内に含まれる特定の文字列を検索するコマンドです。

ログファイルやソースコードなど、
大量のファイルの中から必要な情報を素早く見つけたいときに使用します。

grepコマンドの基本構文

grep [OPTION] "検索文字列"

オプションを指定することで、用途に応じた検索方法で文字列の検索を行います。
システム開発で使用頻度の高い各オプションについては、後述で詳しくまとめています。

grepコマンドの基本的な使い方

特定の文字列を検索する

指定した文字列を検索します。

$ grep "error" test.log
error timeout

test.log というファイル中から “error” の文字列を含む行を検索し、出力します。

大文字・小文字を区別せず検索する

検索文字列の大文字・小文字を区別せずに文字列を検索します。

$ grep -i "error"
ERROR Failed to connect DB
Error User not found
error timeout

検索箇所の前後の行も表示する

指定した文字列だけではなく、その前後数行の内容も表示したい場合に、
-A-B-C オプションを付与することで、検索結果の前後の行も合わせて表示できます。

オプション出力内容
-A指定した行数だけ、一致した行の後ろも表示する
-B指定した行数だけ、一致した行の前表示する
-C指定した行数だけ、一致した行の前後を表示する
$ grep -C 1 "Exception"
INFO User login
Exception: Failed to connect DB
INFO Retry processing

サブディレクトリも含めて検索する

検索対象としたいファイルがサブディレクトリなど複数のディレクトリに存在する場合、
-r オプションを付与することでディレクトリ配下を再帰的に検索します。

$ grep -r "error"
/var/log/syslog:Mar 20 12:01:23 server error: failed to start service
/var/log/nginx/error.log:Mar 20 12:05:47 error: invalid configuration

行番号付きで検索する

指定した検索文字列が含まれる場所(行数)も合わせて知りたい場合、
-n オプションを付与することで、検索文字列が含まれる行数も合わせて出力されます。

$ grep -n "error"
2:ERROR Failed to connect DB
3:error timeout

前述の -r オプションと組み合わせて使うことで、
どのファイルの行数かまで出力されるため、一致箇所の特定がしやすくなります。

特定のファイルだけを対象に検索する

検索対象を特定のファイルだけに絞りたい場合、
--include オプションを付与することで、指定したファイル名や拡張子のファイルのみを検索できます。

$ grep -r --include="*.log" "error"
/var/log/nginx/error.log:Mar 20 12:05:47 error: invalid configuration
/var/log/app/application.log:Mar 20 12:10:12 error: failed to connect DB

特定のファイルを除外して検索する

特定のファイルを検索対象から除外したい場合、
--exclude オプションを付与することで、
指定したファイル名や拡張子のファイルを検索対象から除外して検索できます。

$ grep -r --exclude="*.log" "error"
./src/ErrorHandler.java:throw new RuntimeException("error");
./config/app.properties:error.message=System Error

正規表現で検索する

正規表現を利用することで、指定した条件に一致する文字列を柔軟に検索できます。

$ grep -E "ERROR|WARN" application.log
ERROR Failed to connect DB
WARN Disk usage is high

上記の場合、ERROR または WARN を含む行を検索します。

grepコマンドの実用例

ソースコードから関数の実装箇所や呼び出し箇所を探す

関数名だけが分かっている状態で、
ソースコード全体から実装箇所や呼び出し箇所を検索できます。

$ grep -rn --include="*.c" "checkCollision"
./src/collision.c:42:int checkCollision(Player *player, Enemy *enemy)
./src/game.c:128:if (checkCollision(&player, &enemy)) {
./src/battle.c:85:result = checkCollision(player, boss);
./src/debug.c:23:printf("%d\n", checkCollision(&player, &enemy));

このようにgrep検索を実行することで、
checkCollision() の実装箇所と呼び出し箇所をまとめて確認することができます。

応用

パイプ(|)と組み合わせた検索

grep は単体でファイルを検索するだけでなく、
パイプ(|)を使って他のコマンドの出力結果に対しても使用することができます。

$ history | grep ip
220  ip a
245  ip route
256  history | grep ip

このように historyコマンドと組み合わせて使用した場合、
過去に実行したコマンドの中から特定の文字列を含むものだけを絞り込んで表示できます。

まとめ

grepコマンドは、ファイルやコマンド出力の中から特定の文字列を検索するためのコマンドです。
オプションを使い分けることで用途に応じて検索条件を柔軟に調整できます。

システム開発業務では主に以下のような用途で使用します。

  • ソースコードから関数や処理の実装箇所を探す
  • ログファイルからエラーや特定の出力を抽出する
  • 他のコマンドと組み合わせることで、コマンドの出力結果を絞り込む

また、本記事で紹介した文字列の検索だけでなく、
ファイルやディレクトリそのものを検索する find コマンドも、
設定ファイルの確認などで活用する機会が多いコマンドです。

find コマンドについても詳しく知りたい方は、以下の記事も参考にしてみてください。
【Linux】findコマンドの使い方|開発業務でよく使うオプションまとめ

コメント