9章grepコマンド

なぜそんな顔をしているのか説明して?

—— They Might Be Giants, "Unrelated Thing" (1994)

本章では、grepコマンドのRust版を実装し、与えられた正規表現にマッチする行を検索できるようにします†1。デフォルトでは、入力は標準入力から与えられますが、複数のファイルを与えたり、再帰オプションを指定すればディレクトリ名を与えてディレクトリ内のファイルを検索することもできます。通常は与えられたパターンにマッチする行を出力しますが、マッチしない行やマッチした行数を出力することもできます。さらに、通常のパターンマッチでは大文字と小文字を区別しますが、オプションを指定して区別しないようにすることもできます。オリジナルのgrepには、ほかにもさまざまな機能がありますが、今回はここで説明した機能だけを実装します。

[†1] grepという名前は標準テキストエディタであるedコマンドのg/re/pに由来します。ちなみに、g/re/pは「global regular expression print」という意味です。

本章では、以下の内容を学びます。

  • 大文字と小文字を区別した正規表現
  • 正規表現構文のバリエーション
  • トレイト境界(trait bound†2)を示す別の構文
  • ビット単位の排他的論理和演算子の使い方

[†2] 訳注:「trait bound」の訳に関しては議論があるが、本書では「トレイト境界」とする。

9.1 grepの動作

まずは、BSD版のgrepコマンドのマニュアルページを見て、どれだけ多くのオプションがあるか確認しましょう。

GREP(1) BSD General Commands Manual GREP(1) ...

Get Rustの練習帳 ―コマンドラインツールの作成を通してRustを学ぶ now with the O’Reilly learning platform.

O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.