sedは日暮れて:第4回 正規表現人の巻

うううう。すげえ間があいてしまってすみません。正規表現の最終回です。いろいろな正規表現の組み合わせについて。あそ~だ。始める前に前回の補足を少しだけ。

エスケープ記号の「¥」は、UNIXの「\」(バックスラッシュ)と同じです。DOSを想定しているので何の注釈もなしに書いてしまった。すまぬすまぬ。
さて本題。今回はいろいろな正規表現をがんがん挙げていきますね。

例題1:スペースしか入っていない行を探したい。どうしましょ。
まず。空行とスペースしか入っていない行とは異なるものということに気をつけましょおお。空行を表すのは、前回も書いたですが、^$ です。
スペースを表すには、実際にスペースキーを押せばいいです。スペースが1つ以上含まれるということで。(スペース).*ですね。
注:(スペース)ってのは、スペースを押すさまを表してるんであって、スペースっていう文字を入力しちゃいかんですよ。
これもまた前回の復習ですが、*は、その直前の文字の0回以上の繰り返しなんで、スペースが1個じゃだめ。2個にしてね。

例題2: 電話番号を抜き出したい。如何すればよいのかよいのか。
電話番号の構造を考えます。東京ならば、

03-3xxx-xxxx 
03-5yyy-yyyy

のどっちかですよね。03と-は両方共通だから、正規表現使わずそのまま表しましょう。問題は、xとyの部分にあてはまる数字ですね。0から9までのどれかが入るのだから、前回やったブランケットじゃなかった(笑)、ブラケットを使いましょう。ブラケットの中に文字を入れると、そのどれかになるんでしたね。
[0123456789]とすると、0から9までの数字のひとつという意味になります。でも長くて打つのがめんどくさい。実は、数字とアルファベットには、次の表現法があるのだ。

[0-9] 0から9までのどれか1つの数字
[a-z] 小文字のaからzまでのどれか1つの文字
[A-Z] 大文字のAからZまでのどれか1つの文字

これで答がでるぞ。 東京の電話番号は、
03-[35][0-9][0-9][0-9]-[0-9][0-9][0-9][0-9] ですねん。

[35]は3か5かどっちかという意味ですので念のため。できたぞおお。と安心してちゃだめなのだ。電話番号表記には、次のようなものもありましたぞよ。

03(3xxx)xxxx

さっきの表記と違う点はどこだ。「-」の代わりに「(」と「)」が入った点ですね。さっきのと今度のと両方を表せる正規表現考えましょう。答えはこれだい。

03[-(][35][0-9][0-9][0-9][-)][0-9][0-9][0-9][0-9]

でした。さらに余力のある方は、全国の電話番号も考えてみるとおもしろいぞお。

例題3: 今度は、ある文字を含まない行を探してみたい。ひねくれてますか?(笑)
いや、全然ひねくれてないです。そういうケースのための正規表現もございます。
ブラケットとサーカムフレックス^を併用します。サーカムフレックスって普通に使ったら、行頭という意味でしたわね。それが、ブラケットの中の一番先頭に置くと、意味が変わっちまうんですのよ。あ以外を抜き出したいなら。[^あ] とする。おお新しい用法なり。数字以外だったらば。[^0-9]ですし。アルファベットと数字以外だったら。[^0-9a-zA-Z]となります。

ということで今回は実際に使いそうなケースの一部をとり出してみました。これ以外のものも、 sedの中で説明してゆきますねん。では。来週からやっとsedのコマンドに入ります。次回第5回 command garbled! をお楽しみに!ではまたらいしゅ。

第5回

コメントを残す

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