sedは日暮れて:第2回 正規表現天の巻

 正規表現でございます。私はまっくからパソコンをはじめたもので、正規表現ってなじみがなかったのですが、DOSユーザーの方々にとっては、ワイルドカードはおなじみのものですよね。釈迦に説法かなあと思いつつも孫悟空の冒険ははじまるのであった。天の巻です。 

正規表現とはなんぞや。あるものを選び出すのに、その名を直接個別にさし示すのではなく、その属性の規定によって選択をすることです。なんのこっちゃ。例をあげましょお。ファイル"hirasawa3.txt"というものがあったとして。そのなかみが以下のようなものだとします。

>more hirasawa3.txt 
>嵐の海
>バンディリア旅行団
>我が心の鷲よ月を奪うな
>ヴァーチュアル・ラビット
>UNDOをどうぞ
>山頂晴れて
>静かの海
>死のない男
>太陽の木
>ロシアン・トビスコープ

ちなみに、これらは何かというと。平沢進の傑作ソロ3rdアルバム「ヴァーチュアル・ラビット」(POCH-1084, 注:残念ながら絶盤のようです)に収録されている曲のリストです。ええ、趣味に走ってます(笑)すみません。
ちなみに例ですから短いものにしてます。実際には、sedなどをこんなに短いファイルに使用することはあまりないでしょう。エディタで書きなおす方が早かったりしますので。

この中から「ヴァーチュアル・ラビット」を含む行を抜き出したいとします。ヴァーチュアル・ラビットと文字列を正確に覚えているなら直接指定できますね。grep(指定した表現とマッチする1行を抜き出すユーティリティーです)で以下のように打てば、該当する行が出力されます。 
grep “ヴァーチュアル・ラビット” hirasawa3.txt

抜き出し結果は、
>ヴァーチュアル・ラビット
となります。

grepコマンドの使い方を簡単に書いておきます(実は、WINDOWSに
は"QGREPというフリーウェアがありまして、それを使えば、
DOSのコマンドラインで打ち込まずとも抜き出しをかけてくれるのですが)。

grep “抜き出したい文字列” 対象ファイル名 > 出力ファイル名

これで、抜き出したい文字列を含む行が出力ファイルに書き出されま
す。「> 出力ファイル名」を省略した場合は、標準出力、つまり画面に
結果が表示されることになります。 

話がわきにそれました。もとに戻ると。上記の場合と違って、正確にヴァーチュアル・ラビットと覚えていない場合はどうします?記憶があいまいだった場合。だって、ヴァーチャル・ラビット、バーチャル・ラビット、ヴァーチュアルラビットなど似たような言い回しがたくさんあるではありませんか。

この例ならば、ラビットだけで抜き出すという手もありますね。grepもsedもawkもその文字列だけでなく、その文字列を含む1行に関して働くものですので、結果は同じになります。

grep “ラビット” hirasawa3.txt
抜き出し結果は、やはり
>ヴァーチュアル・ラビット
の1行となります。

けれど。ラビットだけじゃあ余計な行まで抜き出してしまう危険がありません?この例ではないですよ。でも。もしかしてひょっとしてラビット関根という文字列が同じファイルの中に入ってるかもしれないじゃないですか?(そんなことありえんって?しつれ~しましたああ(^^;)

そんなときに、正規表現を使えば、直接なが~い文字列を指定することなしに、なおかつ正確にほしいものを選べます。簡単に言ってしまえば、変数を使うということですね。そうした、変数の役割をする記号のことをメタキャラクタ(特殊記号)といいます。んでもって正規表現をマスターするとはいかにこのメタキャラクタを使いこなせるかということなのです。

なが~い前置きは以上でおしまい。次回正規表現地の巻では、正規表現の眼目メタキャラクタについて書きます。じゃまた来週~!

第3回

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です