Memo
CentOS 6のgrep commandで再帰的検索
1 2 3 4 5 6 7 |
[root@host1 ~]# grep -V GNU grep 2.6.3 Copyright (C) 2009 Free Software Foundation, Inc. License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html> This is free software: you are free to change and redistribute it. There is NO WARRANTY, to the extent permitted by law. |
grep -r 検索文字列 検索対象
または
grep -d recurse 検索文字列 検索対象
[man page]
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 |
GREP(1) GREP(1) 名称 grep, egrep, fgrep, zgrep - パターンにマッチする行を表示する 書式 grep [options] PATTERN [FILE...] grep [options] [-e PATTERN | -f FILE] [FILE...] 解説 grep は、 FILE で名前を指定された入力ファイル (ファイルが指定されてない か、 file の部分に - が指定された場合は標準入力) を読み込み、与えられた PATTERN にマッチする部分を含む行を探します。デフォルト動作では、 grep はマッチした行を表示します。 さらに、2 つのプログラム egrep と fgrep を利用可能 で す 。 egrep は grep -E と同じです。 fgrep は grep -F と同じです。 zgrep は grep -Z と 同じです。 オプション -A NUM, --after-context=NUM NUM で指定した行数だけ、パターンにマッチした行の後の行も表示しま す。 -a, --text バイナリファイルをテキストファイルであるかのように処理します。こ れは --binary-files=text オプションと等価です。 -B NUM, --before-context=NUM NUM で指定した行数だけ、パターンにマッチした行の前の行も表示しま す。 -C [NUM], -NUM, --context[=NUM] NUM で指定した行数 (デフォルトは 2) だけ、パターンにマッチした行 の前後の行も表示します。 -b, --byte-offset 各出力行の前に、入力ファイルの先頭からのバイト単位のオフセットを 表示します。 --binary-files=TYPE ファイルの最初の数バイトが、ファイルの内容がバイナリファイルであ ることを示す場合、ファイルのタイプを TYPE であると仮定します。デ フォルトでは TYPE は binary であり、 grep は通常、バイナリファイ ルの一致を示す一行メッセージを表示するか、マッチしない場合にはな に も表示しません。 TYPE が without-match の場合、 grep はバイナ リファイルはマッチしないものと仮定します。これは -I オプションと 等価です。 TYPE が text の場合、 grep はバイナリファイルをテキス トであるかのように扱います。これは -a オプションと等価です。 警 告: grep --binary-files=text はバイナリのゴミを表示する可能性が あります。出力先が端末である場合で、端末ドライバがこのゴミの一部 をコマンドであると解釈する場合、このゴミが悪い副作用をおよぼす可 能性があります。 -c, --count 通常の出力はせず、各入力ファイルについてマッチした行数を表示しま す。 -v, --invert-match オプションと共に指定した場合は、マッチし なかった行数を表示します (下記参照)。 -d ACTION, --directories=ACTION 入力ファイルがディレクトリの場合に、 ACTION を使ってその処理を行 います。デフォルトでは ACTION は read であり、ディレクトリを普通 のファイルであるかの様に読み取る事を意味します。 ACTION が skip な ら、ディレクトリを黙って読み飛ばします。 ACTION が recurse な ら、 grep は各ディレクトリ下のすべてのファイルを再帰的に読み取り ます。これは -r オプションと等価です。 -E, --extended-regexp PATTERN を拡張された正規表現として扱います (下記参照)。 -e PATTERN, --regexp=PATTERN PATTERN をパターンとして指定します。 - で始まるパターンを保護す るために有効です。 -F, --fixed-strings PATTERN を改行で区切られた固定文字列のリストとして扱います。その 文字列のどれかとマッチするかを調べます。 -f FILE, --file=FILE パ ターンを FILE から 1 行ごとに読み込みます。空のファイルはパタ ーンを含まないので、何にもマッチしません。 -G, --basic-regexp PATTERN を基本的な正規表現として扱います (下記参照)。デフォル ト です。 -H, --with-filename 各々のマッチに対してファイル名を表示します。 -h, --no-filename 複数ファイルを検索した時に、出力の前にファイル名を付けることを抑 制します。 --help 簡単なヘルプメッセージを出力します。 -I バイナリファイルをマッチするデータを含まないかのように処理します 。これは --binary-files=without-match オプションと等価です。 -i, --ignore-case PATTERN と入力ファイルの双方で、英大文字と小文字の区別をしないよ うにします。 -L, --files-without-match 通常の出力はせず、このオプションを指定しなかったときに全く出力さ れない入力ファイルの名前を表示します。スキャン動作は最初のマッチ で終了します。 -l, --files-with-matches 通常の出力はせず、このオプションを指定しなかったときに出力される 入力ファイルの名前を表示します。スキャン動作は最初のマッチで終了 します。 --mmap 可能ならば、デフォルトの read(2) システムコ ー ル の 代 わ り に mmap(2) システムコールを使って入力を読み取ります。ある状況におい て、 --mmap はよりよい性能をもたらします。しかし、 grep の動作中 に 入力ファイルが小さくなるか、または I/O エラーが生じた場合に、 --mmap は (コアダンプを含む) 未定義の動作を引き起こす可能性が あ ります。 -n, --line-number 各出力行の前に、入力ファイルにおける行番号を表示します。 -q, --quiet, --silent 沈黙。通常の出力を抑止します。スキャン動作は最初のマッチで終了し ます。下記の -s や --no-messages オプションも参照。 -r, --recursive 各ディレクトリ下のすべてのファイルを再帰的に読み取ります。これは -d recurse オプションと等価です。 -s, --no-messages 指定されたファイルが存在しないことや読み込みできないことを示すエ ラーメッセージを抑止します。移植性に関する注: GNU grep とは異 な り 、伝統的な grep は POSIX.2 に適合していませんでした。なぜなら 、伝統的な grep には -q オプションが無く、 -s オプション は GNU grep の -q オプションの様に動作したからです。伝統的な grep へ移 植可能であることを意図したシェルスクリプトは、 -q と -s を両方と も使わずに、出力を /dev/null へリダイレクトすべきです。 -U, --binary フ ァイルをバイナリとして扱います。デフォルトでは、MS-DOS と MS- Windows 環境下で grep は、ファイルから読み取った最初の 32KB の内 容を見て、ファイルタイプを推測します。 grep はファイルをテキスト ファイルと判断した場合、オリジナルのファイル内容から ( ^ と $ が 使われている正規表現を正しく動作させるために ) CR 文字を取り除き ます。 -U を指定すると、この当て推量を抑制し、すべてのファイルを 読み取ってマッチ機構へそのまま渡します。もしファイルが各行の末尾 に CR/LF の組みを持つテキストファイルなら、このオプションは正 規 表現を役に立たなくさせることがあるでしょう。このオプションは MS- DOS と MS-Windows 以外のプラットフォームでは効果がありません。 -u, --unix-byte-offsets unix 形式のバイト単位オフセットを報告します。このスイッチを指 定 すると grep は、ファイルが unix 形式のテキストファイル、すなわち 、 CR 文字が取り除かれたファイルであるかのごとくにバイト単位オフ セットを報告します。このことは grep を Unix マシンで動作させたの と同じ結果を生成します。このオプションは -b オプションも使用しな い限り効果がありません。 MS-DOS と MS-Windows 以外のプラットフォ ームでは効果がありません。 -V, --version grep のバージョン番号を標準エラー出力に表示します。バグレポー ト には、この番号を付記してください (下記参照)。 -v, --invert-match 結果を反転し、マッチしなかった行を選択します。 -w, --word-regexp 完全な語にマッチする行のみを選択します。マッチする部分文字列が行 頭から始まっているか、単語構成文字以外の文字が前にあることがテス トされます。同様に、マッチする部分文字列が行末まであるか、単語構 成文字以外の文字が後にある必要があります。単語構成文字とは、レタ ー・数字・アンダスコアです。 -x, --line-regexp 行全体と正確にマッチする行のみを選択します。 -y -i と同じ意味を持つ旧式のオプションです。 --null 通常ファイル名の後に続く文字の代わりにバイト 0 (ASCII NUL 文字) を出力します。例えば、 grep -l --null は各ファイル名の後に、通常 の newline ではなくバイト 0 を出力します。このオプションを指定す ると、 newline 等の例外的な文字を含むファイル名に直面した場合 で も 出力が明白になります。このオプションを find -print0, perl -0, sort -z, xargs -0 等のコマンドと共に使用すれば、任意のファイル名 を 処理できます。ファイル名が newline 文字を含んでいても処理可能 です。 -Z, --decompress 検索を開始する前に入力データを伸長します。このオプションは zlib ライブラリと共にコンパイルした場合のみ使用可能です。 正規表現 正 規表現は、文字列の集合を表現するパターンの事です。数式表現と同様に、 より小さな表現を組み合わせるさまざまな演算子を用いる事で、正規表現を 組 み立てます。 grep は、「基本」正規表現と「拡張」正規表現の 2 種類の正規表現文法を扱 う事ができます。 GNU grep では、どちらの正規表現文法も機能的な違いは あ り ません。他の実装では、基本正規表現は拡張正規表現より能力が低くなって います。ここでは、拡張正規表現について説明します。基本正規表現との違 い は、その後に説明します。 正 規表現の基本単位は、1 文字にマッチする正規表現です。レターと数字を含 む多くの文字は、それ自身にマッチする正規表現です。また、特殊な意味を 持 つ メタ文字も、その文字の前にバックスラッシュを付けると、その本来の文字 にマッチするようになります。 [ と ] で囲まれた文字のリストは、そのリスト中に含まれるどれか 1 文字 に マッチします。ただし、リストの先頭がキャレット ^ の場合は、そのリストに 含まれ ない文字にマッチします。例えば、正規表現 [0123456789] は数 字 1 文字にマッチします。文字の範囲は最初と最後の文字をハイフン (‘-’) でつな ぐことで指定できます。最後に、特定の名前を持つ文字クラスがあらかじめ 定 義 さ れ て い ま す 。 名 前 が内容を示しており、それらは、 [:alnum:], [:alpha:], [:cntrl:], [:digit:], [:graph:], [:lower:], [:print:], [:punct:], [:space:], [:upper:], [:xdigit:] です。例えば、 [[:alnum:]] は [0-9A-Za-z] と同じですが、後者は POSIX ロケールや ASCII コード順に依 存 しますので、前者の方がロケールや文字集合に依存しません。 (クラス名の 中の角括弧はシンボル名の一部であり、リストを区切る角括弧とは別に指定 す る 必要があることに注意) リストの中では、ほとんどのメタ文字は通常の文字 として扱われます。リテラル ] を含めるには、この文字をリストの先頭に置い てください。同様に、リテラル ^ を含めるには、この文字をリストの先頭以外 に置いてください。リテラル - を含めるには、この文字をリストの最後に置い てください。 ピリオド . は、任意の 1 文字にマッチします。シンボル \w は [[:alnum:]] と同じ意味で、シンボル \W は [^[:alnum:]] と同じ意味です。 キャレット ^ と、ドル記号 $ は、それぞれ行頭と行末の空文字列にマッチ す る メタ文字です。シンボル \< とシンボル \> は、それぞれ単語の先頭と末尾 の空文字列にマッチするメタ文字です。シンボル \b は単語の端の空文字列 に マッチします。シンボル \B は単語の端 以外の空文字列にマッチします。 正規表現の後には、繰り返し演算子のどれかが続くことがあります。 ? 直前の項目はオプションであり、最大 1 回マッチします。 * 直前の項目は 0 回以上マッチします。 + 直前の項目は 1 回以上マッチします。 {n} 直前の項目は厳密に n 回マッチします。 {n,} 直前の項目は n 回以上マッチします。 {n,m} 直前の項目は、最低 n 回、最大 m 回マッチします。 2 つの正規表現は結合可能です。結果としてできあがる正規表現は、結合され た 2 つの部分表現にそれぞれマッチする 2 つの部分文字列を結合した任意 の 文字列にマッチします。 2 つの正規表現は中置き型演算子 | で繋ぐことが可能です。結果としてできあ がる正規表現は、どちらかの部分表現にマッチする任意の文字列にマッチし ま す。 繰 り返しは結合に優先します。また結合は選択に優先します。これらの優先規 則を無効とするために、部分表現全体を括弧で囲むことが可能です。 n が 1 つの数字であるような後方参照 \n は、正規表現中の括弧で囲まれた n 番目の部分表現がマッチした文字列とマッチします。 基 本正規表現では、メタ文字 ?, +, {, |, (, ) は、その特殊な意味を失いま す。代わりに、バックスラッシュを付けた \?, \+, \{, \|, \(, \) を使用 し てください。 伝 統的な egrep は、メタ文字 { をサポートしませんでした。また、このメタ 文字の代わりに \{ をサポートする egrep 実装もいくつか存在するので、移植 可 能なスクリプトでは、リテラル { にマッチさせるために egrep パターンで { を使うことは避けて [{] を使うべきです。 GNU egrep は、 { が不正な範囲指定の始まりであるなら特殊文字ではない、と 想 定 し て、伝統的な使用法のサポートを試みます。例えば、シェルコマンド egrep ’{1’ は正規表現の文法エラーを報告せずに、2 文字の文字列 {1 を検索 します。 POSIX.2 は、この動作を一つの拡張として許可していますが、移植可 能なスクリプトではこの使用法を避けるべきです。 環境変数 GREP_OPTIONS この変数は明示的なオプションの前に指定されるデフォルトオプション を指定します。例えば、もし GREP_OPTIONS が ’--binary-files=with- out-match --directories=skip’ である場合、 grep は 2 つのオプ シ ョン --binary-files=without-match と --directories=skip が明示的 なオプションの前に指定されている様に動作します。オプションの指定 は空白によって区切られます。バックスラッシュは次の文字をエスケー プします。これは空白やバックスラッシュを含むオプションを指定する ために用いられます。 LC_ALL, LC_MESSAGES, LANG これらの変数は grep がメッセージに使用する言語を決定する LC_MES- SAGES を指定します。ロケールはこれらの変数のうち最初に設定されて いるものにより決定されます。もしこれらの変数全てが設定されていな い場合、またはメッセージカタログがインストールされていない場合、 ま たは grep が国際言語サポートつき (NLS) でコンパイルされてない 場合には、アメリカンイングリッシュが用いられます。 LC_ALL, LC_CTYPE, LANG これらの変数は、例えばどの文字が空白であるかなど、文字の種類を決 定する LC_CTYPE を指定します。ロケールはこれらの変数のうち最初に 設定されているものにより決定されます。もしこれらの変数全てが設定 されていない場合、またはメッセージカタログがインストールされてい ない場合、または grep が国際言語サポートつき (NLS) でコンパイ ル されてない場合には、 POSIX ロケールが用いられます。 POSIXLY_CORRECT 設 定されている場合、 grep は POSIX.2 として動作し、それ以外の場 合は grep は他の GNU プログラムのように動作します。 POSIX.2 では ファイル名の後に続くオプションはファイル名として扱われます。デフ ォルトでは、このようなオプションはオペランドリストの先頭に並び変 えられて、オプションとして扱われます。また、POSIX.2 では認識でき ないオプションは “ 不法 (illegal)” であると診断されますが、法 律 に 違 反 し て いるわけではないので、デフォルトではこれらは“不正 (invalid)” であると診断されます。 診断 通常、パターンにマッチした行が見つかった場合は 0 を、見つからなかった場 合 は 1 を返します。(ただし、 -v オプションを指定した場合は、逆になりま す。) パターンに文法エラーが存在したり、入力ファイルにアクセスできな い などのシステムエラーが発生した場合は、2 を返します。 バグ バ グレポートは、 bug-gnu-utils@gnu.org まで Email してください。この時 、“Subject:” のどこかに “grep” という単語を忘れずに入れてください。 {m,n} の表現で非常に大きな繰り返しを指定すると、非常に多くのメモリを 消 費 します。さらに、ある種のあいまいな正規表現を指定すると、必要となる時 間とメモリ領域は指数的に増大し、 grep がメモリ不足を起こす可能性があ り ます。 後方参照は非常に動作が遅く、必要となる時間は指数的に増大します。 GNU Project 2000/06/09 GREP(1) |