grep の基礎
grep は、指定されたパターンに一致する行をファイルから検索し、その行を表示するコマンドです。名前は "Global Regular Expression Print" に由来します。
基本的な構文:
grep [オプション] パターン [ファイル...]
-
パターン: 検索したい文字列や正規表現。
-
ファイル: 検索対象のファイル名。複数のファイルを指定することも可能です。ファイル名を省略すると、標準入力から読み込みます。
-
オプション: 検索の挙動を制御するためのフラグ。
よく使うコマンドとオプション
以下は grep でよく使うオプションです。
-
-i: 大文字・小文字を区別せずに検索します (ignore case)。
-
-r または -R: ディレクトリを再帰的に検索します (recursive)。-R はシンボリックリンクも辿ります。
-
-n: マッチした行の行番号を表示します。
-
-v: パターンに一致しない行を表示します (invert match)。
-
-c: マッチした行の数を表示します (count)。
-
-l: マッチする行を含むファイルの名前のみを表示します (files with matches)。
-
-w: 単語単位でパターンに一致する行を検索します (whole word)。
-
-E: 拡張正規表現を使用します (extended regular expression)。
-
-F: パターンを固定文字列として扱います (fixed strings)。正規表現のメタ文字は特別な意味を持ちません。
-
-o: マッチした部分文字列のみを表示します (only matching)。
使用例
いくつかの具体的な使用例を見ていきましょう。
ファイルから特定の文字列を検索する:
example.txt というファイルから "error" という文字列を含む行を検索します。
grep error example.txt
大文字・小文字を区別せずに検索する:
log.txt から "Warning" または "warning" を含む行を検索します。
grep -i warning log.txt
マッチした行の行番号を表示する:
config.ini から "port" を含む行とその行番号を表示します。
grep -n port config.ini
パターンに一致しない行を表示する:
data.csv から "," を含まない行(つまり、区切り文字がない行)を表示します。
grep -v "," data.csv
マッチした行の数を数える:
access.log 中の "404 Not Found" の数を数えます。
grep -c "404 Not Found" access.log
特定の文字列を含むファイルの名前のみを表示する:
カレントディレクトリ以下のファイルから "TODO" という文字列を含むファイル名をリストアップします。
grep -rl TODO .
単語単位で検索する:
document.txt から "user" という単語のみを含む行を検索します。"username" などは除外されます。
grep -w user document.txt
拡張正規表現を使う:
data.log から "INFO" または "DEBUG" で始まる行を検索します。
grep -E "^(INFO|DEBUG)" data.log
固定文字列として検索する:
ファイルからリテラルな "a.b" という文字列を探します。-F を使わない場合、. は任意の1文字、 は直前の文字の0回以上の繰り返しとして解釈されます。
grep -F "a.b*" file.txt
これらの例は grep の基本的な使い方の一部です。grep は非常に強力なツールであり、正規表現と組み合わせることでさらに複雑な検索も可能です。