grep コマンドは、指定したパターン(文字列や正規表現)をファイルや標準入力から検索し、該当する行を表示するコマンドです。
実務では、ログファイルからエラーメッセージを抽出したり、設定ファイルの特定行を探す際に利用されます。
構文(Syntax)
grep [オプション] PATTERN [FILE...]
主なオプション一覧
| オプション | 説明 | 使用例 |
|---|---|---|
-i | 大文字・小文字を区別せず検索 | grep -i error /var/log/syslog |
-v | マッチしない行を表示(否定検索) | grep -v INFO /var/log/syslog |
-n | 行番号を表示 | grep -n main program.c |
-r | ディレクトリを再帰的に検索 | grep -r TODO src/ |
-l | マッチしたファイル名のみ表示 | grep -l TODO *.c |
-c | マッチした行数を表示 | grep -c ERROR /var/log/syslog |
-E | 拡張正規表現(egrep と同等)を使用 | `grep -E “foo |
-w | 単語単位で一致 | grep -w cat animals.txt |
-A NUM | マッチ行の後ろに NUM 行も表示 | grep -A 2 ERROR /var/log/syslog |
-B NUM | マッチ行の前に NUM 行も表示 | grep -B 2 ERROR /var/log/syslog |
-C NUM | マッチ行の前後 NUM 行も表示 | grep -C 3 ERROR /var/log/syslog |
実行例
ファイルから文字列を検索
grep "ERROR" /var/log/syslog
出力例:
Aug 21 10:00 server app[1234]: ERROR: Failed to start service
行番号を付けて検索
grep -n "main" program.c
出力例:
42:int main(int argc, char *argv[]) {
大文字小文字を区別せず検索
grep -i "warning" messages.log
複数ファイルを検索
grep "TODO" *.c
出力例:
main.c:10:// TODO: refactor this function
util.c:25:// TODO: add error handling
前後の行も含めて表示
grep -C 2 "ERROR" /var/log/syslog
出力例:
Aug 21 09:59 server app[1234]: Starting service
Aug 21 10:00 server app[1234]: ERROR: Failed to start service
Aug 21 10:00 server app[1234]: Service stopped
ディレクトリを再帰的に検索
grep -r "config" /etc/
エラー例(存在しないファイル)
grep "ERROR" missing.log
出力例:
grep: missing.log: No such file or directory
関連コマンド
egrep:grep -Eと同等(拡張正規表現)fgrep:grep -Fと同等(正規表現を使わず文字列検索)sed: テキストの置換や加工に利用awk: テキスト処理や抽出に利用
関連
備考
- 検索対象は標準入力でも指定可能(例:
dmesg | grep usb)。 grepはシンプルな検索に向き、複雑な処理はawkやsedと組み合わせることが多いです。- GNU grep と BSD grep ではオプションの一部挙動が異なる場合があります。
参考
- manページ: man7.org grep(1)
- GNU grep: https://www.gnu.org/software/grep/

コメント