Linux grep コマンド
Linux grep (global regular expression) コマンドは、ファイル内の条件に一致する文字列または正規表現を検索するために使用されます。
grep コマンドは、指定されたパターンを含むファイルを検索するために使用されます。ファイルの内容が指定されたパターンに一致する場合、デフォルトでは grep コマンドはそのパターンを含む行を表示します。ファイル名を指定しない場合、または指定されたファイル名が-の場合、grep コマンドは標準入力デバイスからデータを読み取ります。
構文
grep [options] pattern [files] 或 grep [-abcEFGhHilLnqrsvVwxy][-A<显示行数>][-B<显示列数>][-C<显示列数>][-d<进行动作>][-e<范本样式>][-f<范本文件>][--help][范本样式][文件或目录...]
- pattern - 検索する文字列または正規表現を表します。
- files - 検索するファイル名を表します。複数のファイルを同時に検索できます。files パラメータを省略した場合は、デフォルトで標準入力からデータを読み取ります。
一般的なオプション::
-i:大文字と小文字を無視して一致させます。-v:逆方向に検索し、一致しない行のみを表示します。-n:一致した行の行番号を表示します。-r:サブディレクトリ内のファイルを再帰的に検索します。-l:一致したファイル名のみを表示します。-c:一致した行数のみを表示します。
その他のパラメータ説明:
- -a または --text:バイナリデータを無視しない。
- -A<表示行数> または --after-context=<表示行数>:パターンに一致する行を表示するだけでなく、その行の後の内容も表示します。
- -b または --byte-offset:パターンに一致する行を表示する前に、その行の最初の文字の番号を示します。
- -B<表示行数> または --before-context=<表示行数>:パターンに一致する行を表示するだけでなく、その行の前の内容も表示します。
- -c または --count:パターンに一致する行数を数えます。
- -C<表示行数> または --context=<表示行数> または -<表示行数>:パターンに一致する行を表示するだけでなく、その行の前後の内容も表示します。
- -d <アクション> または --directories=<アクション>:検索対象がファイルではなくディレクトリの場合、このパラメータを使用する必要があります。そうしないと、grep コマンドはメッセージを返して処理を停止します。
- -e<パターン> または --regexp=<パターン>:ファイル内容を検索するためのパターンとして文字列を指定します。
- -E または --extended-regexp:パターンを拡張正規表現として使用します。
- -f<規則ファイル> または --file=<規則ファイル>:1つ以上のルールパターンを含むルールファイルを指定します。grep にルール条件に一致するファイル内容を検索させます。形式は1行に1つのルールパターンです。
- -F または --fixed-regexp:パターンを固定文字列のリストとして扱います。
- -G または --basic-regexp:パターンを基本正規表現として使用します。
- -h または --no-filename:パターンに一致する行を表示する前に、その行が属するファイル名を表示しません。
- -H または --with-filename:パターンに一致する行を表示する前に、その行が属するファイル名を表示します。
- -i または --ignore-case:文字の大文字と小文字の違いを無視します。
- -l または --file-with-matches:内容が指定されたパターンに一致するファイル名を一覧表示します。
- -L または --files-without-match:内容が指定されたパターンに一致しないファイル名を一覧表示します。
- -n または --line-number:パターンに一致する行を表示する前に、その行の行番号を示します。
- -o または --only-matching:PATTERN に一致する部分のみを表示します。
- -q または --quiet または --silent:何も情報を表示しません。
- -r または --recursive:このパラメータの効果は、'-d recurse' パラメータを指定した場合と同じです。
- -s または --no-messages:エラーメッセージを表示しません。
- -v または --invert-match:一致するテキストを含まないすべての行を表示します。
- -V または --version:バージョン情報を表示します。
- -w または --word-regexp:単語全体が一致する行のみを表示します。
- -x --line-regexp:行全体が一致する行のみを表示します。
- -y :このパラメータの効果は、'-i' パラメータを指定した場合と同じです。
例
1. ファイル file.txt 内で文字列 "hello" を検索し、一致する行を表示します:
grep hello file.txt
2. ディレクトリ dir 内のすべてのファイルを再帰的に検索し、正規表現 "pattern" に一致する行を検索して、一致した行のファイル名と行番号を表示します:
grep -r -n pattern dir/
3. 標準入力から文字列 "world" を検索し、一致した行数のみを表示します:
echo "hello world" | grep -c world
4. 現在のディレクトリ内で、名前に 'file' という接尾辞を持つファイルの中から、文字列 'test' を含むファイルを検索し、その文字列を含む行を表示します。この場合、次のコマンドを使用できます:
grep test *file
結果は次のとおりです:
$ grep test test* #查找前缀有“test”的文件包含“test”字符串的文件 testfile1:This a Linux testfile! #列出testfile1 文件中包含test字符的行 testfile_2:This is a linux testfile! #列出testfile_2 文件中包含test字符的行 testfile_2:Linux test #列出testfile_2 文件中包含test字符的行
5. 条件に一致するファイルを再帰的に検索します。例えば、指定ディレクトリ /etc/acpi とそのサブディレクトリ(存在する場合)の下にあるすべてのファイルから文字列 'update' を含むファイルを検索し、その文字列を含む行の内容を表示するには、次のコマンドを使用します:
grep -r update /etc/acpi
出力結果は次のとおりです:
$ grep -r update /etc/acpi #以递归的方式查找“etc/acpi” #下包含“update”的文件 /etc/acpi/ac.d/85-anacron.sh:# (Things like the slocate updatedb cause a lot of IO.) Rather than /etc/acpi/resume.d/85-anacron.sh:# (Things like the slocate updatedb cause a lot of IO.) Rather than /etc/acpi/events/thinkpad-cmos:action=/usr/sbin/thinkpad-keys--update
6. 逆方向の検索。前の各例は条件に一致する行を検索して表示するものでしたが、'-v' パラメータを使用すると、条件に一致しない行の内容を表示できます。
ファイル名に 'test' を含むファイル内で、'test' を含まない行を検索します。この場合、使用するコマンドは次のとおりです:
grep -v test *test*
結果は次のとおりです:
$ grep-v test* #查找文件名中包含test 的文件中不包含test 的行 testfile1:helLinux! testfile1:Linis a free Unix-type operating system. testfile1:Lin testfile_1:HELLO LINUX! testfile_1:LINUX IS A FREE UNIX-TYPE OPTERATING SYSTEM. testfile_1:THIS IS A LINUX TESTFILE! testfile_2:HELLO LINUX! testfile_2:Linux is a free unix-type opterating system.その他の拡張
Linux コマンド大全