はじめに
こんにちは!今回はgrepコマンドについて解説します。
grepは、ファイルやテキストから特定の文字列を検索するコマンドです。ログファイルからエラーを探したり、コードから特定の関数を見つけたり、めちゃくちゃ便利です。
grepコマンドとは
grepは、Global Regular Expression Print の略で、テキストから指定したパターンにマッチする行を抽出するコマンドです。
正規表現も使えるので、複雑な検索もできます。Linuxで最もよく使われるコマンドの1つです。
基本構文
|
|
主なオプション
| オプション | 説明 |
|---|---|
-i |
大文字小文字を区別しない |
-v |
マッチしない行を表示(反転) |
-n |
行番号を表示 |
-c |
マッチした行数を表示 |
-l |
マッチしたファイル名のみ表示 |
-r または -R |
ディレクトリを再帰的に検索 |
-w |
単語全体にマッチ |
-E |
拡張正規表現を使用(egrepと同じ) |
-A n |
マッチ行の後n行も表示 |
-B n |
マッチ行の前n行も表示 |
-C n |
マッチ行の前後n行を表示 |
--color |
マッチ部分を色付け |
使用例
例1: 基本的な文字列検索
|
|
実行結果:
|
|
ファイルから"error"を含む行を抽出します。
例2: 大文字小文字を区別しない検索
|
|
実行結果:
|
|
-iオプションで大文字小文字を無視します。
例3: 行番号を表示
|
|
実行結果:
|
|
どこにあるか一目瞭然です。
例4: マッチしない行を表示
|
|
実行結果:
|
|
-vで、コメント行(#で始まる行)を除外できます。設定ファイルの中身だけ見たい時に便利。
例5: マッチ数をカウント
|
|
実行結果:
|
|
各ファイルに何個TODOがあるか確認できます。
例6: ファイル名のみ表示
|
|
実行結果:
|
|
どのファイルに"password"が含まれてるかだけ知りたい時に。
例7: 再帰的に検索
|
|
実行結果:
|
|
ディレクトリ全体から検索できます。
例8: 単語全体にマッチ
|
|
“test"という単語だけにマッチし、“testing"や"contest"はマッチしません。
例9: 前後の行も表示
|
|
実行結果(-C 2の場合):
|
|
エラーの前後も見られるので、原因が分かりやすいです。
例10: 複数のパターンを検索
|
|
実行結果:
|
|
-Eで拡張正規表現が使えます。
例11: パイプと組み合わせ
|
|
実行結果:
|
|
他のコマンドの出力からも検索できます。
例12: 正規表現を使った検索
|
|
正規表現で複雑なパターンも検索できます。
よく使うパターン
ログファイルからエラーを検索
|
|
エラー関連のキーワードをまとめて検索。
コメント行と空行を除外
|
|
または
|
|
設定ファイルの有効な行だけ表示します。
特定の拡張子のファイルから検索
|
|
JavaScriptファイルだけから検索。
特定のディレクトリを除外
|
|
node_modulesは除外してTODOを検索。
Tips・注意点
-
色付き表示:
--color=autoで見やすくなる1grep --color=auto "error" app.log -
エイリアスに設定:
.bashrcに追加すると便利1alias grep='grep --color=auto' -
バイナリファイルは警告が出る: テキストファイル専用
1grep "text" binary_file # Binary file ... matches -
正規表現のエスケープ: 特殊文字は
\でエスケープ1grep "\." file.txt # ドットをリテラルとして検索 -
grepとegrepとfgrepの違い:
grep: 基本正規表現egrep=grep -E: 拡張正規表現fgrep=grep -F: 固定文字列(正規表現を使わない、高速)
実践的な使い方
アクセスログから特定のIPを抽出
|
|
エラーが多い時間帯を調べる
|
|
実行結果:
|
|
コード内のTODOをカウント
|
|
プロジェクト内のTODOの数を確認。
複数ファイルから関数定義を検索
|
|
JavaScriptの関数定義を探す。
ログファイルから特定期間のエラーを抽出
|
|
10時〜12時のエラーだけ抽出。
プロセス確認(psと組み合わせ)
|
|
[n]odeとすることで、grep自身のプロセスは除外されます。
設定ファイルの有効な設定だけ表示
|
|
コメントと空行を除外。
ファイルの差分確認(簡易版)
|
|
file2にあってfile1にない行を表示。
ディレクトリ内の全ファイルでエラーをカウント
|
|
環境変数から特定の値を検索
|
|
Gitのコミットメッセージを検索
|
|
まとめ
今回はgrepコマンドについて解説しました。
ポイント:
grepでテキストから文字列やパターンを検索できる-iで大文字小文字を区別しない-rで再帰的にディレクトリを検索-vで反転(マッチしない行を表示)-nで行番号を表示-Eで拡張正規表現が使える- パイプと組み合わせて強力な検索が可能
grepはLinuxの基本中の基本です。ログ解析、コード検索、設定ファイルの確認など、あらゆる場面で使います。正規表現を覚えると、さらに強力になりますよ。
次回もLinuxコマンドの学習を続けていきましょう!