grepコマンド
grep は、各 FILE で PATTERNS を検索します。PATTERNS は、改行文字で区切られた 1 つまたは複数のパターンであり、grep はパターンに一致する各行を出力します。通常、PATTERNS はシェルコマンドで grep を使用する際に引用符で囲む必要があります。
FILE が「-」の場合は標準入力を意味します。FILE が指定されない場合、再帰的検索は作業ディレクトリを調べ、非再帰的検索は標準入力を読み取ります。
grep [オプション…] パターン [ファイル…]
grep [オプション…] -e パターン … [ファイル…]
grep [オプション…] -f パターンファイル … [ファイル…]
Pattern Syntax
オプション | 説明 |
---|---|
-E, –extended-regexp | PATTERNS を拡張正規表現 (ERE) として解釈します。 |
-F, –fixed-strings | PATTERNS を固定文字列として解釈し、正規表現とはしません。 |
-G, –basic-regexp | PATTERNS を基本正規表現 (BRE) として解釈します。これがデフォルトです。 |
Matching Control
オプション | 説明 | 使用例 |
---|---|---|
-e PATTERN | 指定したパターンで検索する | grep -e "error" file.txt |
-f FILE | 指定したファイル内のパターンを検索する | grep -f patterns.txt file.txt |
-i | 大文字と小文字を区別せずに検索する | grep -i "warning" log.txt |
-v | 一致しない行を表示する(反転検索) | grep -v "DEBUG" log.txt |
-w | 完全な単語として一致する行のみ表示する | grep -w "cat" words.txt |
-x | 行全体が完全一致する場合のみ表示する | grep -x "Hello World" file.txt |
色々なgrepの使い方
テスト用ファイルの作成
# 作業用ディレクトリの作成と移動 mkdir -p ~/work && cd ~/work # テスト用のファイル作成 cat > grep_test1 <<EOF apple APPLE banana cherry grape EOF # ファイルの内容確認 cat grep_test1

「appl」という文字列をgrep_test1から検索
grep appl grep_test1

複数のパターンをマッチする
grep -e apple -e cherry grep_test1

-iオプションは大文字と小文字を無視するため、大文字のAPPLEも表示されました
grep -i apple grep_test1

-vはパターンがマッチした行が表示されません。
grep -v apple grep_test1

General Output Control
オプション | 説明 | 使用例 |
---|---|---|
-c | 一致した行数のみを表示する | grep -c "error" log.txt |
--color=auto | 一致部分を色付きで表示する | grep --color=auto "fail" log.txt |
-L | 一致しないファイル名を表示する | grep -L "pattern" *.txt |
-l | 一致するファイル名を表示する | grep -l "pattern" *.txt |
-m NUM | 指定した回数だけ一致したら停止する | grep -m 5 "error" log.txt |
-o | 一致した部分のみを表示する | grep -o "error[0-9]*" log.txt |
-q | 出力をせず、ステータスコードのみ返す | grep -q "error" log.txt && echo "Found" |
-s | 存在しないファイルのエラーメッセージを抑制する | grep -s "pattern" missing.txt |
出力制御を試してみる
applに一致した行数を表示
grep -c "appl" grep_test1

ファイル内に「apple」が存在するファイル名を表示
grep -l "apple" *

Output Line Prefix Control
オプション | 説明 | 使用例 |
---|---|---|
-b | 各行の先頭にバイトオフセット(0からの位置)を表示 | grep -b "error" log.txt |
-H | 各一致行の先頭にファイル名を表示(複数ファイル検索時のデフォルト) | grep -H "pattern" file1.txt file2.txt |
-h | ファイル名の表示を抑制(単一ファイル検索時のデフォルト) | grep -h "pattern" file1.txt file2.txt |
--label=LABEL | 標準入力のデータを仮想ファイル名として表示 | gzip -cd file.gz |
-n | 各一致行の先頭に行番号を表示 | grep -n "error" log.txt |
-T | 出力をタブで揃えて見やすくする | grep -T -n "pattern" file.txt |
-Z | ファイル名の後に改行の代わりにNULL文字を出力 | grep -lZ "pattern" *.txt |
出力行の接頭辞制御を試してみる
テスト用のファイルを作成
# 作業用ディレクトリの作成と移動 mkdir -p ~/work && cd ~/work # テスト用のファイル作成1 cat > grep_test1 <<EOF apple APPLE banana cherry grape EOF # テスト用のファイル作成2 cat > grep_test2 <<EOF orange apple pear EOF

一致したパターンにファイル名を表示させる
grep -H -e cherry -e orange grep_test1 grep_test2

ファイル名、一致した行を表示し、タブでそろえる
grep -nT -e cherry -e orange grep_test1 grep_test2

Context Line Control
オプション | 説明 | 使用例 |
---|---|---|
-A NUM | 一致した行の後に NUM 行を追加表示 | grep -A 3 "error" log.txt |
-B NUM | 一致した行の前に NUM 行を追加表示 | grep -B 3 "error" log.txt |
-C NUM / -NUM | 一致した行の前後 NUM 行を追加表示 | grep -C 3 "error" log.txt |
--group-separator=SEP | グループの区切り文字を変更(デフォルトは -- ) | grep -C 2 --group-separator="===" "error" log.txt |
--no-group-separator | グループ区切りをなくす | grep -C 2 --no-group-separator "error" log.txt |
コンテキスト行制御を試してみる
一致した行(app)の後に2行表示
grep -A 2 app grep_test1

File and Directory Selection
オプション | 説明 | 使用例 |
---|---|---|
-a | バイナリファイルをテキストファイルとして処理 | grep -a "error" binary.log |
-I | バイナリファイルを検索対象外にする | grep -I "error" * |
-r | 指定ディレクトリ以下のすべてのファイルを再帰的に検索 | grep -r "error" /var/log |
-R | -r と同様だが、シンボリックリンクをたどる | grep -R "error" /var/log |
--exclude=GLOB | 指定したパターンに一致するファイルを検索対象外にする | grep -r --exclude="*.log" "error" /var/log |
--exclude-dir=GLOB | 指定したパターンに一致するディレクトリを検索対象外にする | grep -r --exclude-dir="backup" "error" /var/log |
--include=GLOB | 指定したパターンに一致するファイルのみを検索 | grep -r --include="*.log" "error" /var/log |
ファイル・ディレクトリ選択オプションを試してみる
テスト用のファイルを作成。今回はバイナリファイルも作成します
# 作業用ディレクトリの作成と移動 mkdir -p ~/work && cd ~/work # バイナリファイル作成 printf '\x48\x65\x6C\x6C\x6F\x00\xFF\xFE\xFD' > binary_file.bin # テスト用のファイル作成1 cat > grep_test1 <<EOF apple APPLE banana cherry grape EOF # カレントディレクトリホームに戻す cd

バイナリファイルを処理し、~/work/配下のファイルを検索対象とする
grep -a Hello -r ~/work/

コメント