オンラインテキスト目次
パターンマッチとgrep目次

grepの必要性

mizutani@edu.tuis.ac.jp
目次
パターンマッチとは何か
grepとは何か
grep使用の必要性

目次

パターンマッチとは何か

文書情報処理で頻繁におこなわれるものの1つにパターンマッチング文字列照合: string pattern matching)がある. これは文字列中に含まれる『特定の文字列』をパターンと考え,目的とする文書中に,指定したパターンが存在するかどうかを判定して処理をする作業である.

次の例を考えてみよう(コンピュータ時代ならではの考えであり一読を薦める). これは2001年までに1万冊の本を電子テキスト化し1作あたり1セント,つまり全部で 100ドルの費用で利用できるようにしようとする Project Gutenberg の意図を述べてい る( Michael S. Hart, Director Project Gutenberg National Clearinghouse for Machine Readable Textsによるメッセージから引用). ただし,行番号n: は後からをつけ加えたものである.

1: I have enclosed the following in hopeful anticipation of queries.
2: Please do not hesitate to ask for further information.
3:
4: The purpose of Project Gutenberg is to encourage the creation and
5: distribution of English language electronic texts. We prefer the
6: texts to be made available in pure ASCII formats so they would be
7: most easily converted to use in various hardware and software. A
8: file of this nature will also be made available in various markup
9: formats as it is used in various environments. However we accept
10: files in ANY format, and will do our best to provide them in all.
11:
12: We assist in the selection of hardware and software as well as in
13: their installation and use. We also assist in scanning, spelling
14: checkers, proofreading, etc. Our goal is to provide a collection
15: of 10,000 of the most used books by the year 2001, and to reduce,
16: and we do mean reduce, the effective costs to the user to a price
17: of approximately one cent per book, plus the cost of media and of
18: shipping and handling. Thus we hope the entire cost of libraries
19: of this nature will be about $100 plus the price of the disks and
20: CDROMS and mailing. Currently the price of making CDROMS is said
21: to be about $500 for mastering and then $2 per copy.
22: To create such a library would take less than one out of ten of a
23: conservatively estimated 100,000 libraries in the U.S. alone: if
24: each created one full text. If all the libraries co-operated, it
25: would be less than 10% of a volume per library. If there were 10
26: members of each library creating electronic texts, then each only
27: has to do 1% of a single book to create a truly public library of
28: 10,000 books which would each be usable on any of the 100 million
29: computers we are targeting.
30: 
31: So far most electronic text work has been carried out by private,
32: semi-private or incorporated individuals, with several library or
33: college collections being created, but being made mostly from the
34: works entered by individuals on their own time and expense. This
35: labor has largely been either a labor of love, or a labor made by
36: those who see future libraries as computer searchable collections
37: which can be transmitted via disks, phone lines or other media at
38: a fraction of the cost in money, time and paper as in present day
39: paper media. These electronic books will not have to be rebound,
40: reprinted, reshelved, etc. They will not have to be reserved and
41: restricted to use by one patron at a time. All materials will be
42: available to all patrons from all locations at all times.
.......

この中で『text』という単語は随所に現れている. たとえば24行目にあるが,5,6行目にある「texts」は『text』とは単語としては別である. ここで,単語(word)の意味をはっきりさせておこう. 次のように定義する.

定義:単語とは,英数字からなる文字列で,その前後を空白文字(スペースやタブ)やコンマ・ピリオドなどの記号で区切られている文字列である.
しかし『text』という文字列を含んだパターン/text/を考えた場合,5, 6, 24行目などにある単語は,パターン/text/を含んでいる. パターンが/text/であるとき,文字列「text」,「texts」はそのパターンにマッチするという.
約束:パターン『pattern』を表すときのは,記号『/』で挟んでそのパターンを/string/で表すことにする.
もし大文字.小文字を区別しないでパターンを調べることするならば,「Text」, 「Texts」, 「TEXT」, 「TEXTS」などの文字列がマッチすることになる.

実際の情報処理においては,パターンマッチングによる処理(たいていの場合,前処理に過ぎない)がもっとも基本的操作である. パターンの指定には,正規表現(regular expression)が使われる. 正規表現は情報処理においては最重要の概念である.

目次

grepとは何か

grepは正規表現を使ってパターンマッチを行うフィルタコマンドで,標準入力からデータを受け取り,その中から指定された文字列をパターンとして含む行を抜き出して(標準出力装置に)出力する. grepを使えば,膨大なファイル(群)の中から,必要なデータを抜き出したり,探している文字がどこにあるかを探し出すことができる.

情報処理関係の中で,grepはもっとも基本的で有用なコマンドである. grepを使って有益なパターンマッチを行うためには,次の点を知っているべきである.

  1. grepのパターン検索は単位として実行される. 行とは改行コードに挟まれた文字列である. 行の中でマッチするパターンを見つけてしまえば,(その後にもマッチする文字列があったとしても)次の行を調べにいく. テキストを構成する行が,1つ以上の文から成っている「長大な行」のとき(文の終了を示す『.』や『。』の後にも,改行せずに文が続いているとき),長大な1行の中の後に続く文が検索対象とはならず,無駄な出力結果を招く可能性が大きく,一括した情報処理が困難となる. メイル文やべた書きテキストのような特別な場合を除き,LaTeX文書やHTML文書では必ず1つの文ごとに改行すること.

  2. 特別な利用がない限り,英数字や記号は半角文字で入力すること. 『Apple』と『Apple』のように,全角文字と半角文字を無節操に混在させた文書は最悪で,情報検索の媒体としてはまったく価値がない. 今後,書く文書には十分注意すること(今ある文書はどうしよう?).

目次

grep使用の必要性

grepはプロセス管理などUNIXを利用する際に,頻繁に利用される便利なツールである. 特に,文書ファイル群に対しgrepを使う局面としては,莫大なファイルデータがある場合,つまり ような場合に,次の目的のために利用することが考えられる(ファイルの編集作業中に,語の検索や置き換えはエディタの機能を使って行うことができる). コンピュータの記憶容量の増加,CDROMなど大容量可搬メディアの普及,インターネットの利用が大衆化している現在,このような状況は決してまれな状況ではなく, その対処法が最重要の情報処理技法の1つであることに注意する.
特定のファイルを探している場合 grepを使って指定したパターンを含むファイル群から探しているファイルを見つけ出すことである.. grepを使って探しているファイルが含んでいるはずのパターンを指定し,たとえば『*』(すべてのファイル),『*.tex』(拡張子.texの付くファイル),『*.html』(拡張子.htmlに付くファイル)などでターゲットとするファイル群を広く設定してパターンマッチさせる. 多くのファイルにマッチしたときは,パターンマッチする条件を厳しくして,候補となるファイルを絞り込む. この間に,さらに別のフィルターにパイプして,必要な情報を漉しとることも考える.

こうして見当をつけた少数のファイル群をcatやページャであるlessやmoreを使ってファイル内容を実際に表示して,目的とするファイルを確定するのである. この際,フィルターの追加

目的の文を探している場合
指定したファイルの中から,エディタを起動して単語検索せずに,grepを使ってパターンを工夫して探し出したい行(文書部分)をすばやく見出すことである. パターンが多くの行にマッチしてしまう時には,マッチする条件を厳しくするように指定パーターンをさらに工夫して絞り込む.

指定したファイルの主題の推測
grepを使って様々にパターンを替えて多くマッチするパターンを模索しながら,指定したファイルのキーワード群を推察し,そのファイル内容を推測することである. 指定したファイルに対してあるパターンがより多くマッチする行を含んでいるならば,そのファイルはそのパターンをキーワードとして持つと考えられる. ファイル内容はいくつかのキーワードによって要約されると考えることができるために,キーワードの推察からファイル内容を推測できる可能性がある.
ファイル内容を表示する目的で,エディタを起動すべきではない. 不用意にファイル内容を書き換え,ファイルの`日付'を変更してしまうかもしれないからである. ファイルの日付は情報処理においては,重要な要素の1つだからである.

目次
パターンマッチとgrep目次
オンラインテキスト目次


mizutani@edu.tuis.ac.jp