🎯 この記事で学べること
- 1grepコマンドの基本的な使い方をマスターできます
- 2大文字小文字を無視した検索や行番号表示など、便利なオプションが使えるようになります
- 3正規表現を使った高度なパターン検索ができるようになります
- 4ログファイルやソースコードから必要な情報を素早く見つけられるようになります
- 5パイプと組み合わせた実践的な検索テクニックが身につきます
読了時間: 約8分
はじめに
こんにちは!今日は「grep」という、とっても便利な検索コマンドを学びましょう。
「大きなログファイルから特定のエラーを探したい...」「ソースコードから関数名を検索したい...」そんな経験はありませんか?
grepは、まるで優秀な探偵のように、ファイルの中から指定した文字列やパターンを瞬時に見つけ出してくれるコマンドです。名前の由来は「Global Regular Expression Print」ですが、難しく考える必要はありません。「文字列を探すコマンド」と覚えればOKです!
grepの基本的な使い方
基本構文
まずは基本の形を覚えましょう!
grep [オプション] パターン [ファイル...]
簡単に言うと:「grep」に「探したい文字」と「探す場所(ファイル)」を教えてあげるだけです!
単純な文字列検索から始めよう
最初は簡単な例から始めましょう。ログファイルから「error」という文字を探してみます:
$ grep "error" logfile.txt
ファイルツリー
探したい文字にスペースが含まれる場合は、必ず引用符で囲みましょう。例:grep "connection error" log.txt
見てください!「error」を含む行だけが表示されましたね。まるで蛍光ペンでハイライトしたように、必要な情報だけを抜き出してくれます。
🎮 理解度チェック
便利なオプションを覚えよう!
-i オプション(大文字小文字を無視)
「Error」も「ERROR」も「error」も全部見つけたい!そんな時は-i
オプションです:
$ grep -i "error" log.txt
ファイルツリー
すごいでしょう?大文字小文字を気にせず、全部見つけてくれました!
-i
は「ignore case(大文字小文字を無視)」の頭文字です。覚えやすいですね!
-n オプション(行番号を表示)
「何行目にあるの?」を知りたい時は-n
オプションを使います:
$ grep -n "function" script.js
ファイルツリー
行番号が表示されると、ファイルを編集する時にとても便利ですね!
-v オプション(逆転の発想!)
「○○を含まない行」を見つけたい時は-v
オプションです:
$ grep -v "debug" log.txt # debugを含まない行を表示
例えば、デバッグメッセージを除外して重要なログだけ見たい時に便利です!
-c オプション(数を数える)
「何個見つかった?」を知りたい時は-c
オプション:
$ grep -c "error" log.txt # errorが含まれる行数を表示
-r オプション(フォルダの中も探す)
「このフォルダ以下全部探して!」という時は-r
オプション:
$ grep -r "TODO" ./src/
ファイルツリー
プロジェクト全体からTODOコメントを探すのに最適ですね!
正規表現の活用
基本的な正規表現
grepは正規表現(Regular Expression)をサポートしています。
# 行頭の検索(^)
$ grep "^error" log.txt
# 行末の検索($)
$ grep "Error$" log.txt
# 任意の1文字(.)
$ grep "l.g" file.txt # log, lag, legなど
# 0回以上の繰り返し(*)
$ grep "erro*r" file.txt # err, error, erroor など
ファイルツリー
拡張正規表現(-E オプション)
より高度な正規表現を使用する場合は-E
オプションを使います。
# OR検索(|)
$ grep -E "error|warning" log.txt
# 1回以上の繰り返し(+)
$ grep -E "erro+r" file.txt
# 回数指定({n,m})
$ grep -E "[0-9]{3,5}" data.txt # 3~5桁の数字
ファイルツリー
文字クラス
特定の文字セットを検索できます。
# 数字を含む行
$ grep "[0-9]" file.txt
# 英数字の繰り返し
$ grep -E "[a-zA-Z0-9]+" file.txt
# IPアドレスのパターン
$ grep -E "[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}" access.log
実践的な使用例(現場で使えるテクニック!)
ログファイルの解析(エラーを素早く発見)
実際の開発現場でよく使うパターンを見てみましょう:
# エラーレベルのログを時刻付きで表示
$ grep -E "^[0-9]{4}-[0-9]{2}-[0-9]{2}.*ERROR" app.log
# 特定期間のログを抽出(パイプで連結!)
$ grep "2025-08-08" system.log | grep -E "ERROR|CRITICAL"
ファイルツリー
ソースコードの検索
# 関数定義を検索
$ grep -n "function.*(" *.js
# インポート文を検索
$ grep -r "^import" ./src/ --include="*.js"
# TODOコメントを検索
$ grep -rn "TODO\|FIXME" . --include="*.py"
設定ファイルの確認
# コメント行と空行を除外して表示
$ grep -v "^#" config.conf | grep -v "^$"
# 特定の設定項目を検索
$ grep -E "^(port|host|timeout)" server.conf
ファイルツリー
🎮 理解度チェック
高度なテクニック(プロ級の技!)
コンテキスト表示(前後の行も見たい!)
エラーが発生した前後の状況も確認したい時に便利です:
# 前後2行を表示(Context)
$ grep -C 2 "error" log.txt
# 前3行を表示(Before)
$ grep -B 3 "error" log.txt
# 後3行を表示(After)
$ grep -A 3 "error" log.txt
ファイルツリー
覚え方:Context(前後)、Before(前)、After(後)の頭文字です!
ファイル名のみ表示(どのファイルに含まれてる?)
# マッチしたファイル名のみ表示
$ grep -l "TODO" *.txt
# マッチしなかったファイル名を表示(逆転の発想!)
$ grep -L "error" *.log
単語単位の検索(部分一致を避ける)
# 完全な単語として検索(-w)
$ grep -w "log" file.txt # "log"は検索するが"login"や"blog"は除外
「log」は見つけたいけど「login」や「blog」は除外したい、そんな時に便利です!
パイプとの組み合わせ
プロセス検索
# 特定のプロセスを検索
$ ps aux | grep python
# grepプロセス自体を除外
$ ps aux | grep python | grep -v grep
ファイル検索との連携
# findと組み合わせて特定ファイル内を検索
$ find . -name "*.log" -exec grep "error" {} \;
# より効率的な方法
$ find . -name "*.log" | xargs grep "error"
複数パターンの検索
# ファイルからパターンを読み込む
$ grep -f patterns.txt logfile.txt
# 複数のgrepを連結
$ grep "2025" log.txt | grep "error" | grep -v "debug"
パフォーマンスの最適化
大きなファイルの検索
# 最初のマッチで停止
$ grep -m 1 "pattern" huge_file.txt
# バイナリファイルをスキップ
$ grep -I "text" *
# 固定文字列検索(正規表現を無効化)
$ grep -F "exact.string" file.txt
並列処理
# GNU parallelを使った並列grep
$ find . -name "*.log" | parallel grep "error" {}
# xargsで並列実行
$ find . -name "*.log" -print0 | xargs -0 -P 4 grep "error"
よくあるエラーと対処法
Binary file matches
# バイナリファイルを除外
$ grep -I "text" *
# バイナリファイルも強制的に検索
$ grep -a "text" binary_file
Argument list too long
# findとxargsを使用
$ find . -name "*.txt" | xargs grep "pattern"
# または再帰オプションを使用
$ grep -r "pattern" .
実用的な例
アクセスログの解析
# 404エラーの抽出
$ grep " 404 " access.log
# 特定IPアドレスからのアクセス
$ grep "192.168.1.100" access.log
# 1時間ごとのアクセス数
$ grep "08/Aug/2025:14" access.log | wc -l
セキュリティ監査
# パスワードを含む可能性のある行
$ grep -rEi "password|passwd|pwd" . --include="*.conf"
# SSHログイン失敗の確認
$ grep "Failed password" /var/log/auth.log
📝 まとめ
今日はgrep
コマンドについて学びました!
grep
は文字列検索の最強ツール(まるで優秀な探偵!)- 基本オプション:
-i
(大文字小文字無視)、-n
(行番号)、-r
(再帰検索)、-v
(反転) - 正規表現で柔軟な検索:
^
(行頭)、$
(行末)、.
(任意の1文字)、|
(または) - コンテキスト表示:
-C
(前後)、-B
(前)、-A
(後) - パイプと組み合わせて強力なテキスト処理
grepは最初は単純な文字列検索から始めて、慣れたら正規表現を使った高度な検索にチャレンジしていきましょう。ログファイルの解析やソースコードの検索など、日々の作業が劇的に効率化されますよ!
特にgrep -r "TODO" .
のような再帰検索は、プロジェクト全体から特定の文字列を探すのに重宝します。ぜひ活用してくださいね!
今日の練習: まずgrep "error" log.txt
から始めて、次にgrep -i "error" log.txt
で大文字小文字を無視した検索を試してみましょう。慣れてきたらgrep -E "error|warning"
で複数パターンの検索にも挑戦してみてください!