grep コマンドは、正規表現を使ったパターンの検索にも利用できます。正規表現は、grep に対して特別な意味を持つ特殊文字に、数字や英字を組み合わせて作成します。メタキャラクタと呼ばれるこれらの特殊文字はシステムに対しても特別な意味を持つため、引用符で囲むかエスケープする必要があります。コマンドプロンプトに対して grep の正規表現を使う場合は、必ず引用符で囲むか、メタキャラクタ (& ! . * $ ? ¥ など) をバックスラッシュ (¥) でエスケープします。
キャレット (^) は行の先頭を表します。したがって、次のコマンドは、ファイル list 内の b で始まる行を検索します。
$ grep '^b' list |
ドル記号 ($) は行の終わりを表します。次のコマンドは、b で終わる行をすべて表示します。
$ grep 'b$' list |
また、次のコマンドは、ファイル list 内で b だけ (b が 1 文字だけで、その前後にタブや空白さえ存在しない) からなる行を検索します。
$ grep '^b$' list |
正規表現内のドット (.) は任意の 1 文字を表します。したがって、次のコマンドは、最初の 2 文字が an の任意の 3 文字パターンを含む行を検索します。
$ grep 'an.' list |
この 3 文字パターンには、「any」、「and」、「management」、「plan 」(空白やタブも 1 文字と数えられるため、この plan は n の後に空白があります) などが一致します。
ある文字のすぐ後にアスタリスク (*) が続いている場合、grep は * を「その直前の文字のゼロ個以上の繰り返し」と解釈します。正規表現の後にアスタリスクが続いている場合、grep は * を「正規表現のパターンに一致する文字のゼロ個以上の繰り返し」と解釈します。
「ゼロ個の繰り返し」という表現のため、その使い方が直観的には理解しにくいかも知れません。たとえば、qu という文字列を含むワードをすべて検索する場合は、次のように入力すれば期待通りの結果が得られます。
$ grep 'qu*' list |
しかし、文字 n を含むワードをすべて検索する場合は、次のように入力しなければなりません。
$ grep 'nn*' list |
また、nn というパターンを含むワードをすべて検索する場合は、次のように入力しなければなりません。
$ grep 'nnn*' list |
このように指定しなかった場合の結果を確認する場合は、次の例を試してください。
ファイル list 内で任意の文字のゼロ個以上の繰り返しを検索するには、次のように入力します。
$ grep '.*' list |