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