2009 年 11 月 18 日

東京女子大学のトップページ   情報処理センターのページ   東京女子大学の Gmail のページ   東京女子大学の図書館のページ   浅川のホームページ   この授業のホームページ

本日のお品書き

  1. 正規表現の復習
  2. SGML, XML, HTML についての講義と実習
  3. ネットワークの基礎知識
  4. 情報処理技術者試験試験対策

正規表現の復習

grep の使い方

grepという UNIX コマンドがある。 これを使ってみよう。grep は2つ引数をとって grep pattern fileなどとする。コマンドの意味は,正規表現の パターンをファイル中から見つけ出して標準出力(デフォルトでは画面)に出 力してくれるコマンドである。grep abc ファイル名とすれば, ファイルから文字列 abc を含む行だけが出力される。 grep html index.html とすれば,html を含む行だけが出力される。

egrep というコマンドもあって,こちらは拡張された正規表現を使うことができる(grep -E と同じ意味である)。 あるファイルの中から,HTML のタグを含む行だけを抜き出してくるには,

egrep '<[\/A-z]+>' index.html

などとする。正規表現をシングルクォートで囲むのは,正規表現で指定するパターンがシェル (前回の復習!覚えてるかい?)によって展開されてしまうのを避けるためである。

この正規表現の意味は,< で始まってスラッシュかアルファベットの大文字か小文字が 1 回以上 (正規表現中の+の意味は最低1回は前の文字が続くことだった) 繰り返され,> が続くパターン,という意味になる。

スラッシュは正規表現中では特別な意味を持つので,その意味を消す (エスケープするという)ためにスラッシュの前にバックスラッシュ書いてある。

演習1: htmlの開始タグだけを表示する正規表現を書け。

より正確な正規表現としては,<br />タグなどのように, 末尾に空白が複数回(0回でも良い)挿入され,かつスラッシュが入って,最後 に> が来るようなパターンにも対応しなければならない。こ れは次のように指定すれば良い。

grep -E '<[\/A-z][A-z]* */*>' *.html | nkf --utf8 

パイプ(|これも前回の復習!覚えてる?)でつないで nkf に出力を渡しているのは,日本語の文字コードを UTF8 にしてターミナルエミュレータで 正しく表示させるためである。

さらに,スラッシュは<の直後に一度だけしか現れないので それを正確に表現するために最初の文字だけ<[\/A-z]と スラッシュを含み,次の文字は[A-z]とスラッシュを含まない表現にしてある。

検索結果が多過ぎて画面がスクロールしてしまうようならば, さらにlvをパイプでつないで,

grep -E '<[\\A-z][A-z]*[ \/]*>' index.html | nkf --utf8 | lv -Ou8

などとしなければならない。

Emacs での正規表現の利用

正規表現は Emacs でも使うことができる。エスケープキーを一度押して,すぐに離して,それからある文字をタイプすることを M- と表現するとすると,エスケープキーを押して,次に,xをタイプすることはM-x と表せる。Emacs 中から,正規表現を使って文字列の置換を行うためには,

M-x replace-regexp

である。ちなみに,正規表現ではなく,ただの文字列を置換するだけならM-x replace-string というコマンドも利用できる。

演習2 Emacs を使って,html タグ<ol><ul>に変換する練習を行え。

正規表現を使った高度な置換を行う方が良いのか,それとも単純な文字列の置換を複数回行った方が良いのか,迷うこともあるだろう。検索漏れを防ぐためにも,単純な文字列の置換が何種類もある場合には,正規表現を使った方がよいだろう。

コマンドラインからあるファイル中の文字列を置換するコマンドしては,tr というコマンドも用意されている。index.html に現れるアルファベットをすべて大文字にしたければ,

tr a-z A-Z < index.html > index-new.html

もしくは,

cat index.html | tr a-z A-Z > index-new.html

などとすればよい。また UNIX には sed というストリームエディタがあって,コマンドラインからでもかなり強力な文書編集ができる。慣れてきたら使ってみると良い。

SGML, XML, HTML

SGML, XML, HTML

ネットワークの基礎知識

情報処理技術者試験試験対策