最も基本的な形式の grep コマンドは、検索ツールです。検索や検索とは異なり、ファイル名の検索に限定されません。ファイルの内容から特定のテキスト文字列を検索するために最もよく使用されます。出力として、grep は、検索パターンが見つかったファイルの各行全体を表示します。このようにして、grep を使用して、テキスト ファイルを処理し、最も関連性の高い内容を読み取ることができます。たとえば、アクセス ログを見て、ユーザーのログイン イベントを監査したい場合があります。ログ全体を読んだり、テキスト エディターで検索語を入力したりする代わりに、grep コマンドを使用して、関連するすべての行を画面に出力するだけです。
構文
grep コマンドの構文は次のとおりです。
# grep [options] {search pattern} {file names}
grep を使用してファイルを検索する
ファイルの内容を検索するだけでなく、grep を使用してディレクトリを検索し、特定のファイルを見つけることができます。 ls -l | grep audit コマンドは、現在のディレクトリ内にある名前に「audit」が含まれるファイルの長いリストを返します。
検索を逆にしたい場合 (パターンに一致しない行を出力する場合)、-v パラメーターを使用します。
$ grep -v t file1 one four five $
一致するパターンが見つかった行番号を見つける必要がある場合は、-n パラメータを使用してください:
$ grep -n t file1 2:two 3:three $
一致するパターンを含む行数を確認するだけの場合は、-c パラメータを使用します:
$ grep -c t file1 2 $
複数の一致パターンを指定する必要がある場合は、-e パラメータを使用して個々のパターンを指定します。
$ grep -e t -e f file1 two three four five $
grep コマンドの実行中に以下のエラーが発生した場合:
grep: command not found
選択したディストリビューションに従って、以下のパッケージをインストールしてみてください:
OS 分布 | コマンド |
---|---|
OS X | brew install grep |
Debian | apt-get インストール grep |
Ubuntu | apt-get インストール grep |
アルパイン | apk add grep |
Arch Linux | pacman -S grep |
カリ Linux | apt-get インストール grep |
CentOS | yum install grep |
Fedora | dnf install grep |
Raspbian | apt-get インストール grep |
grep コマンドの例
1. PATTERN を拡張正規表現として解釈するには:
# grep --extended-regexp PATTERN # grep -E PATTERN
2. PATTERN を固定文字列のリストとして解釈するには:
# grep -F PATTERN # grep --fixed-strings PATTERN
3. PATTERN を基本的な正規表現として解釈するには:
# grep -G PATTERN # grep --basic-regexp PATTERN
4. PATTERN を Perl 正規表現として解釈するには:
# grep -P PATTERN # grep --perl-regexp PATTERN
5. パターンとして PATTERN を使用するには:
# grep -e PATTERN, # grep --regexp=PATTERN
6. FILE からパターンを取得するには、1 行に 1 つずつ:
# grep -f FILE, --file=FILE
7. PATTERN ファイルと入力ファイルの両方で大文字と小文字の区別を無視するには:
# grep -i PATTERN # grep --ignore-case PATTERN
8. 一致の意味を反転するには、一致しない行を選択するには:
# grep -v PATTERN # grep --invert-match PATTERN
9. 単語全体を形成する一致を含む行のみを選択するには:
# grep -w PATTERN # grep --word-regexp PATTERN
10. 行全体に完全に一致する一致のみを選択するには:
# grep -x PATTERN # grep --line-regexp PATTERN
11. ケースを無視するには:
# grep -y PATTERN
12. 通常の出力を抑制する。代わりに、一致する行の数を出力します:
# grep -c PATTERN # grep --count PATTERN
13. カラーで表示するには:
# grep --color PATTERN
14. 通常の出力を抑制する。代わりに、各入力ファイルの名前を出力します。from out は期待されません:
# grep -L # grep --files-without-match
15. 通常の出力を抑制する。代わりに、出力が出力された各入力ファイルの名前を出力します:
# grep -l # grep --files-with-matches
16.静かにする;標準出力には何も書き込まないでください。一致するものが見つかった場合は、ステータス 0 ですぐに終了します:
# grep -q # grep --quiet # grep --silent
17. 一致する NUM 行後にファイルの読み取りを停止するには:
# grep -m NUM # grep --max-count=NUM
18. 一致する行の一致した (空でない) 部分のみを印刷するには:
# grep -o PATTERN # grep --only-matching PATTERN
19. 存在しない、または読み取れないファイルに関するエラー メッセージを非表示にするには:
# grep -s PATTERN # grep --no-messages PATTERN
20. 出力の各行の前に、入力ファイル内の 0 ベースのバイト オフセットを出力するには:
# grep -b PATTERN # grep --byte-offset PATTERN
21. 各試合のファイル名を印刷するには:
# grep -H PATTERN # grep --with-filename PATTERN
22. 出力時にファイル名のプレフィックスを抑制するには:
# grep -h PATTERN # grep --no-filename PATTERN
23. 実際には標準入力からの入力を、ファイル LABEL からの入力として表示するには:
# grep -cd PATTERN | grep --label=mysearch -H PATTERN
24. 入力ファイル内で、出力の各行の前に 1 から始まる行番号を付けるには:
# grep -n PATTERN # grep --line-number PATTERN
25. 実際の行コンテンツの最初の文字がタブ位置にあることを確認するには:
# grep -T PATTERN # grep --initial-tab PATTERN
26. Unix スタイルのバイト オフセットを報告するには:
# grep -u PATTERN # grep --unix-byte-offsets PATTERN
27. 通常ファイル名に続く文字の代わりに 0 バイトを出力するには:
# grep -Z PATTERN # grep --null PATTERN
28. 一致した行の後に NUM 行の後続コンテキストを出力するには:
# grep -A NUM PATTERN # grep --after-context=NUM PATTERN
29. 一致する行の前に先頭のコンテキストの NUM 行を印刷するには:
# grep -B NUM PATTERN # grep --before-context=NUM PATTERN
30. 出力コンテキストの NUM 行を印刷するには:
# grep -C NUM PATTERN # grep --context=NUM PATTERN
31. バイナリ ファイルをテキストのように処理するには:
# grep -a PATTERN /tmp/bin # grep -text PATTERN /tmp/bin
32. ファイルのタイプが TYPE であると仮定するには:
# grep --binary-files=TYPE PATTERN
33. 入力ファイルがデバイス、FIFO、またはソケットの場合は、ACTION を使用して処理します:
# grep -D ACTION PATTERN # grep --devices=ACTION PATTERN
34. 入力ファイルがディレクトリの場合は、ACTION を使用して処理します:
# grep -d ACTION PATTERN # grep --directories=ACTION PATTERN
35. ベース名が GLOB に一致するファイルをスキップするには:
# grep --exclude=GLOB PATTERN
36. ベース名が FILE から読み取ったファイル名グロブのいずれかと一致するファイルをスキップするには:
# grep --exclude-from=FILE PATTERN
37. 再帰検索からパターン DIR に一致するディレクトリを除外するには:
# grep --exclude-dir=DIR PATTERN
38. 一致するデータが含まれていないかのようにバイナリ ファイルを処理するには:
# grep -I PATTERN
39. ベース名が GLOB に一致するファイルのみを検索するには:
# grep --include=GLOB
40. 各ディレクトリの下にあるすべてのファイルを再帰的に読み取るには:
# grep -r PATTERN # grep -R PATTERN
41. 出力で行バッファリングを使用するには:
# grep --line-buffered PATTERN
42. 可能であれば、デフォルトの読み取りではなく、mmap システム コールを使用して入力を読み取ります:
# grep --mmap PATTERN
43. ファイルをバイナリとして扱うには:
# grep -U /tmp/file PATTERN # grep --binary /tmp/file PATTERN
44. 入力を一連の行として扱うには:
# grep -z PATTERN # grep --null-data PATTERN
45. ヘルプを表示するには:
# grep -h
46. grep のバージョン番号を出力するには:
# grep -V