GREP(1V)                ユーザ・コマンド                GREP(1V)



【名前】
     grep, egrep, fgrep - ファイルの文字列または正規表現のサーチ

【形式】
     grep [ -bchilnsvw ] [ -e expression ] [ filename... ]

     egrep [ -bchilnsv ] [ -e expression ] [ -f filename ]
          [ expression ] [ filename... ]

     fgrep [ -bchilnsvx ] [ -e string ] [ -f filename ]
          [ string ] [ filename... ]

【SYSTEM V 形式】
     /usr/5bin/grep [ -bchilnsvw ] [ -e expression ]
          [ filename... ]

【国際機能】
     grep ファミリは、 EUC 主および補助コードセットの文字を 含 む
     ファイルをサーチすることができます。パターン・マッチングは、
     バイト単位ではなく、文字単位で行われ、いかなるコードセットの
     複数バイト文字でも比較することができます。

     正規表現のパターン・マッチングの場合は、特殊文字は主 コー ド
     セッ ト(コードセット0)に含まれるものでなければなりません。大
     かっこで囲んだ文字コード範囲を使用する場合には、範囲の始点と
     終 点 の文字は同じコードセットに属さなければなりません。同じ
     コードセットに属していない場合、両端として指定した2つの文 字
     だけが対象になります。

     -i オプションは、主コードセット ASCII の大文字と小文字の違い
     のみを無視します。

  [環境]
     環境変数 LC_CTYPE, LANG は、 grep の文字分類を制御し ま す。
     grep  を起動すると、これらの環境変数は LC_CTYPE, LANG の順に
     チェックされます。有効な値が検出されると、文字分類の残りの環
     境 変 数 は 無 視されます。たとえば、LANG を新しく設定しても
     LC_CTYPE の現在有効な文字分類に上書きすることはありませ ん。
     有 効 な値がない場合、シェルの文字分類はデフォルトで POSIX.1
     の C の locale に設定されます。

【使用条件】
     System V バージョンのこのコマンドは、 System V ソフトウェ ア
     ・イ ン ストレーション・オプションとともに提供されます。オプ
     ション・ソフトウェアのインストール方法については「SunOSイ ン
     ストレーション・ガイド」を参照してください。

     なお JLE では、このコマンドは自動的にインストールされます。

【機能説明】
     grep は、入力ファイル(省略時には標準入力)をパターン検索 し
     て、 そのパターンを含む行をすべて標準出力に出力します。 grep
     が照合に使用するパターンは、ed(1) で使用する形式の限定正 規
     表 現 で す。 egrep は、変更を含む完全な正規表現です。 fgrep
     は、固定された文字列で、正規表現メタキャラクタはサポートしま
     せん。

     一般にこれらの 3 種類プログラムの中で最も処理速度の早いの は
     egrep です。

     expression で `$'、 `*'、 [、 `^'、 `|'、 `('、 `)'、と  `\'
     などの文字を使用する際には注意が必要です。これらの文字はシェ
     ルにとっても特別な意味があるからです。 expression 全体を単一
     引用符 '...' で囲むのが最も安全です。

     grep ユーティリティを複数の入力ファイルに適用する場合に は、
     出 力される各行の先頭にファイル名が付けられます。 1 つのファ
     イルを処理するときはファイル名は表示されません。したがって、
     ファ イ ル 名 を 表 示 したい場合は、 2 番目のファイルとして
     /dev/null を指定してください。

【オプション】
     -b   各行の先頭にその行のブロック番号を付けます。こ の オ プ
          ショ ンは、文脈によりブロック番号を見つけだす場合に便利
          です。

     -c   一致したパターンを含む行そのものではなく、その行数だ け
          を出力します。

     -h   ファイル名を表示しません。

     -i   比較時に大文字と小文字を区別しません。すなわち、大文 字
          と小文字は同じと解釈されます。

     -l   一致した行があるファイルのファイル名だけを(一度ず つ)
          復帰改行( NEWLINE )で区切って出力します。

     -n   各行の先頭にファイル内の相対行番号を付けます。

     -s   エラー・メッセージだけを表示します。エラー状態を調べ る
          のに便利です。

     -v   一致しない行だけをサーチし、表示します。

     -w   < と > で囲んだのと同じように式をワードとしてサーチし
          ます。これは grep にのみ有効です。

     -x   完全に一致した行だけを表示します。これは fgrep にのみ有
          効です。

     -e expression
          単に expression のみを指定したと き と 同 じ で す が、
          expression が `-' で始まる場合に使用します。

     -e string
          fgrep の場合は、引数はリテラル文字列 string です。

     -f filename
          filename から正規表現(egrep)または復帰改行で区切った 文
          字列のリスト(fgrep)を取り出します。

【SYSTEM V オプション】
     grep に対する -s オプションは、ファイルが存在しないか、読 み
     取り不能であることを示すエラー・メッセージを出さないことを指
     定します。

【正規表現】
     次の「1 文字」の正規表現は、1 文字と一致します。

     c    普通の文字(下記の特殊文字以外)はそれ自身と一致する  1
          文字の正規表現です。

     &i>c   バックスラッシュの後に特殊文字を続けた場合、その特殊 文
          字と一致します。特殊文字には次のものがあります。

               +    `.'、 `*'、 `[' と `\' (ピリオド、アスタリス
                    ク、 左かぎかっこ、バックスラッシュ)は、かぎ
                    かっこ ([]) で囲まないかぎり、特殊な意味を 持
                    ちます。

               +    `^' (キャレットまたはサーカムフ レッ ク ス)
                    は、 正規表現全体の先頭にある場合、または左か
                    ぎかっこの直後にある場合、特殊な意味を持ち ま
                    す。

               +    $ (通貨記号)は、正規表現全体の終わりにあ る
                    場合、特殊な意味を持ちます。

     `<'、 `>'、 `('、 `)'、 `{'、または `}' がバックスラッシュの
     後に現われたとき、下記のように正規表現の演算子を示します。

     .    ピリオドは、復帰改行以外の任意の文字と一致します。

     [string]
          かぎかっこで囲んだ空でない文字列は、文字列のいずれか の
          文 字 と 一 致 します。ただし、文字列の最初の文字が `^'
          (サーカムフレックスまたはキャレット)の場合、正規表 現
          は、 復帰改行および文字列内の他の文字を除くすべての文字
          と一致します。これ以外の位置にある `^' は、普通の文字と
          して解釈されます。マイナス(`-')符号を使用して、一致さ
          せる連続する ASCII 文字の範囲を示すことができます。たと
          え ば 範囲 [0-9] は文字列 [0123456789] と同じです。 `-'
          は、文字列の先頭(または先頭の `^' の後)か、終わりにあ
          る 場合は普通の文字として解釈されます。右側のかぎかっこ
          `]' は、かぎかっこで囲まれた文字列の最初の文字である 場
          合(先頭の `^' の後)、囲まれた文字列は終了しません。た
          とえば、 []a-f] は `]' か、または文字 a から f と一致し
          ます。このような文字列では、 `.', `*', `[', と `\' は普
          通の文字として解釈されます。

     次の規則により、正規表現を作成することができます。

     *    1 文字の正規表現とそれに続くアスタリスク `*' は、 0  個
          以上の 1 文字正規表現と一致します。一致する対象が複数個
          ある場合は、最も多くの文字数が一致する正規表現 (それ も
          複数個あれば左端に近いもの)と一致します。

     \(と\)
          \( と \) に囲まれた正規表現は、正規表現それ自体と一致す
          るものと一致します。これは grep だけに有効です。

     &i>n   式 &i>n は、同じ正規表現の \( と \) に囲まれた正規表現 と
          一致する同じ文字列と一致します。 n は、数字とし、指定さ
          れたサブエクスプレッションは、左から数えて n 番目の  \(
          となります。たとえば式 ^\(.*\)\1$ は、同じ 2 つの文字列
          からなる行と一致します。

  [連結]
     正規表現を連結したものは、テキスト文字列を連結したものと一致
     し、 そ れぞれがサーチ・パターンの連続する正規表現と一致しま
     す。

     <   正規表現の中のシーケンス < は、その直後の 1 文字の正規
          表 現を「ワード」の始めの部分、すなわち、行の始めか、文
          字、数字、または下線の前、およびこれら以外の文字の後 の
          部分のみと一致させます。

     >   正規表現の中のシーケンス > は、その直後の 1 文字の正規
          表 現 を 「ワード」の終わりの部分、すなわち、行の終わり
          か、文字、数字、または下線以外の文字の前の部分のみと 一
          致させます。

     \{m\}
     \{m,\}
     \{m,n\}
          1 文字の正規表現とそれに続く \{m\}、  \{m,\}、 ま た は
          \{m,n\}  は、 指 定された回数分、その正規表現と一致しま
          す。 m と n の値は 256 未満の負でない整数でなければなり
          ま せ ん。 \{m\} は m 個の正規表現と一致します。 \{m,\}
          は m 個以上の正規表現と一致します。 \{m,n\} は、 m 個か
          ら n 個の正規表現と一致します。第 2 および第 3 の指定方
          法の場合、許容範囲内でできるだけ多くの回数分、その正 規
          表現と一致します。

     ^    正規表現の先頭のキャレットまたはサーカムフレックス  (^)
          は、正規表現を行の最初の部分とのみ一致させます。

     $    ドル記号 ($) は、正規表現全体の終わりにある場合、正規表
          現を行の最後の部分とのみ一致させます。

     構造

          example% ^entire regular expression $

     は、正規表現全体を行全体と一致させます。

     egrep は、 \(、 \)、 &i>n、 <、 >、 \{、と \}、を除いて grep
     と 同じ種類の正規表現を使用できます。 egrep では、さらに次の
     ものが使用できます。

               *    正規表現(1 文字だけでなく)とそれに続くア ス
                    タリスク `*' は、 0 個以上の 1 文字正規表現と
                    一致します。一致する対象が複数個ある場合 は、
                    で きるだけ左端に近い最長の正規表現と一致しま
                    す。

               +    正規表現とそれに続く正符号 `+' は、1 個以上の
                    1  文字正規表現と一致します。一致する対象が複
                    数個ある場合は、できるだけ左端に近い最長の 正
                    規表現と一致します。

               ?    正規表現とそれに続く疑問符 `?' は、 0 個以 上
                    1  文字正規表現と一致します。一致する対象が複
                    数個ある場合は、できるだけ左端に近い最長の 正
                    規表現と一致します。

               |    代替。 2 つの正規表現を `|' または復帰改行 で
                    区 切った場合は、いずれかの正規表現に一致する
                    ものと一致します。

               ()   かっこで囲んだ正規表現はその正規表現に一致 す
                    るものと一致します。

     演算子の優先順位は、高いものから、 `[ ]' (文字分類)、  `*'
     `+'  `?' (クロージャ)、 `|' (代替)および復帰改行となって
     います。

【使用例】
     fgrep を使用してファイル内の一定の文字列をサーチします。
          example % fgrep intro /usr/share/man/man3/*.3*

     grep を使用して文字分類を検索します。
          example% grep '[1-8]([CJMSNX])' /usr/share/man/man1/*.1

     egrep を使用していくつかの組み合わせのパターンを検索します。
          example  %  egrep  '(Sally|Fred)  (Smith|Jones|Parker)'
          telephone.list

     1 つのファイルを処理するときにだけファイル名を表示するには、
     /dev/null を 2 番目のファイルとして使用します。
          example % grep 'Sally Parker' telephone.list /dev/null

【ファイル】
     /dev/null

【関連項目】
    awk(1),ed(1),ex(1),sh(1),vi(1),sed(1V)

【使用上の留意点】
     1 行の長さは最大 1024 文字までとします。それより長い行は切り
     捨てられます。

     オプション -l と -v を組み合わせても、正規表現が見つからない
     ファイルのリストは生成されません。このようなリストを生成する
     には、次のようなボーン・シェルコマンドを使用します。

             for filename in *
             do
                     if [ `grep "re" $filename | wc -l` -eq 0 ]
                     then
                             echo $filename
                     fi
             done

     または次のような C シェルコマンドを使用します。

             foreach filename (*)
                     if (`grep "re" $filename | wc -l` == 0) echo $filename
             end

     grep は 1 つだけにするのが理想的です。

【診断】
     一致するものがあった場合の終了ステータスは 0、一致するものが
     なかった場合には 1、構文エラーまたはアクセス不能エラーがあっ
     た場合には 2 となります。