12日に理化部会の研究発表大会が開かれました。このとき、物理の小道のWebサイトの紹介を行ったのですが、 ホールのなかには電波が届きません。そこで、サイト全体をハードディスクの中に構築することにしました。
「物理の小道」は、8つのインターネットサイト上に分散構築されているのです。 そのため、「物理の小道」 サイトのhtml記述には、は複雑にリンクが貼られて、8つのサイトが有機的に統合されています。 全てのファイルのリンクを改定する作業は考えただけでも、事実上不可能です。 また、htmlファイル書き換えの度に、リンクを修正、追加するのは大変です。自動的に変換してくれるようにしておけば助かるのです。 そこで、登場するのが、Unix でも有名なツール 「sed」 と 「make」 の2つのツールの利用です。
テキストファイルの文章を一括して置換してくれるツールです。昔は、キャラクタベースでプログラム開発を行っていました。
手作業で多くのファイルを修正するのは難しいことです。修正をし損ねた場合は致命的です。そこで、ストリームエディタが使われていたのです。
例えば次のようなケースです。
< HR > < div >< FONT color="green" >< B >各ページへのリンク< /B >< /FONT > (クリックするとそのページへ飛びます)< /div > < div style="margin-left:50px" > < table style="font-size:10pt;" > < tr > < td style="background-color:yellow; font-size:10pt; border:outset; text-align:center;" >早 耳 情 報< /td > < td > < A href="http://tachiro.hp.infoseek.co.jp/index-to-kagakunews.html" title="管理人(志)が独善で選ぶニュースです" >科学技術ニュース< /A > < /td > < /tr > < tr > < td style="background-color:yellow; font-size:10pt; border:outset; text-align:center;" >勉 強 部 屋< /td > < td width="*" > < A href="http://tachiro.client.jp/index-to-physics-0.html" title="授業で使うプリントです!" > 入門編< /A > ・ < A href="http://tachiro.client.jp/index-to-physics-1.html" title="復習のための資料が中心です" >標準編< /A > < !-- ・ < A href="http://tachiro.hp.infoseek.co.jp/index-to-physics-2.html" title="入試問題を詳しく解説・解答する" >挑戦編< /A > (< A href="http://tachiro.hp.infoseek.co.jp/index-to-nyuusi.html" title="入試問題の解説です" >入試問題< /A > ・ < A href="http://tachiro.hp.infoseek.co.jp/index-to-new.html" title="新作問題研究のページです" >新作問題< /A >) ・ 番外編( < A href="http://tachiro.client.jp/index-to-physics-3-hi_phys.html" title="ハイレベル物理学のページです" >番外物理< /A > ・ 微分方程式 < A href="http://tachiro.client.jp/index-to-physics-3.html" title="微分方程式の初心者向けのページです" >入門< /A > ・ < A href="http://tachiro.client.jp/index-to-physics-3.html#diff-eq-physics" title="微分方程式を使って物理を考えるページです" >応用< /A > ・ < A href="http://tachiro.client.jp/index-to-physics-3.html#diff-eq-book" title="管理人(志)手作りの微分方程式の教科書です" >教科書< /A > ) -- > ・ < A href="http://tachiro3.client.jp/index-to-physics-2.html" title="入試問題を詳しく解説・解答する" >挑戦編< /A > (< A href="http://tachiro3.client.jp/index-to-nyuusi.html" title="入試問題の解説です" >入試< /A > ・ < A href="http://tachiro3.client.jp/index-to-new.html" title="新作問題研究のページです" >新作< /A > ・ < A href="http://tachiro3.client.jp/index-to-challenge.html" title="挑戦問題のページです" >挑戦< /A > ・ < A href="http://tachiro3.client.jp/index-to-daily.html" title="一日一題のページです" >1日< /A >) ・ 番外編( < A href="http://tachiro.hp.infoseek.co.jp/index-to-physics-3-hi_phys.html" title="ハイレベル物理学のページです" >番外物理< /A > ・ 微分方程式 < A href="http://tachiro.hp.infoseek.co.jp/index-to-physics-3.html" title="微分方程式の初心者向けのページです" >入門< /A > ・ < A href="http://tachiro.hp.infoseek.co.jp/index-to-physics-3.html#diff-eq-physics" title="微分方程式を使って物理を考えるページです" >応用< /A > ・ < A href="http://tachiro.hp.infoseek.co.jp/index-to-physics-3.html#diff-eq-book" title="管理人(志)手作りの微分方程式の教科書です" >教科書< /A > ) < /td > < /tr > < tr > < td style="background-color:yellow; font-size:10pt; border:outset; text-align:center;" >高 大 連 携< /td > < td > 連絡板( < A href="http://www.bb-brain.co.jp/tachiro/index-to-koudai.html" title="高大連携に関する案内、資料など" >お知らせ< /A > ・ < A href="http://www.bb-brain.co.jp/tachiro/index-to-koudai.html" title="高大連携に関する講義日程など" >日程等< /A > ・ < A href="http://www.bb-brain.co.jp/tachiro/index-to-koudai.html#rentuu" title="高大連携通信の最近発行分を見る" >連携通信最新号< /A > ) ・ 連携通信( < A href="http://www.bb-brain.co.jp/tachiro/index-to-koudai2002.html" title="2002年度に発行した連携通信です" >2002年度< /A > ・ < A href="http://www.bb-brain.co.jp/tachiro/index-to-koudai2003.html" title="2003年度に発行した連携通信です" >2003年度< /A > ・ < A href="http://www.bb-brain.co.jp/tachiro/index-to-koudai2004.html" title="2004年度に発行した連携通信です" >2004年度< /A > ・ < A href="http://www.bb-brain.co.jp/tachiro/index-to-koudai2005.html" title="2005年度に発行した連携通信です" >2005年度< /A > ) < /td > < /tr > < tr > < td style="background-color:yellow; font-size:10pt; border:outset; text-align:center;" >P C 関連< /td > < td > < A href="http://tachiro2.client.jp/index-to-freesoft-0.html" title="管理人(志)が愛用する、お勧めのフリーソフト" >フリーソフトの小道< /A > ・ < A href="http://tachiro2.client.jp/index-to-freesoft-0.html" title="OpenOffice.org の便利な小技" >OOo の小技< /A > ・ < A href="http://tachiro2.client.jp/index-to-nipponbasi.html" title="管理人(志)の行動一般" >日本橋だより< /A > ・ < A href="http://tachiro2.client.jp/index-to-robot.html" title="管理人(志)の趣味" >ロボット研究< /A > < /td > < /tr > < tr > < td style="background-color:yellow; font-size:10pt; border:outset; text-align:center;" >プログラミング< /td > < td > 養成講座( < A href="http://tachiro2.client.jp/index-to-freesoft-1.html" >入門編< /A > ・ < A href="http://tachiro2.client.jp/index-to-freesoft-1.html#Programing-develop" >応用編< /A > ) ・ コンテスト( < A href="http://tachiro2.client.jp/index-to-procon.html" >規定< /A > ・ < A href="http://tachiro2.client.jp/procon/index-to-procon-record.html" >記録< /A > ・ < A href="http://tachiro2.client.jp/procon/index-to-procon-tools.html" >ツール< /A > ) < /td > < /tr > < tr > < td style="background-color:yellow; font-size:10pt; border:outset; text-align:center;" >ギャラリー< /td > < td > < A href="http://tachiro2.client.jp/index-to-gallery-1.html" >路傍の科学< /A > ・< A href="http://tachiro2.client.jp/index-to-gallery-2.html" >路上観察< /A > ・< A href="http://tachiro2.client.jp/index-to-gallery-omake.html" >おまけグッズ< /A > < /td > < /tr > < tr > < td style="background-color:yellow; font-size:10pt; border:outset; text-align:center;" >掲 示 板< /td > < td > < A href="http://bbs.infoseek.co.jp/Board01?user=tac_hiro" >質問・疑問・意見・情報など自由にどうぞ< /A >< /td > < /tr > < tr > < td style="background-color:yellow; font-size:10pt; border:outset; text-align:center;" >アーカイブス< /td > < td > 「物理の小道」 の 過去の資料< /A > ( < A href="http://tachiro.kt.fc2.com/index.html" >Web日誌< /A > ・< A href="http://tachiro.kt.fc2.com/index.html#ActiveTopPage" >TopPages< /A > ・< A href="http://tachiro.kt.fc2.com/index.html#TopPageArc" >Captures< /A > ・< A href="http://tachiro.kt.fc2.com/index.html#etc" >その他< /A > ) < /td > < /tr > < tr > < td style="background-color:yellow; font-size:10pt; border:outset; text-align:center;" >サイトマップ< /td > < td > 「物理の小道」 < A href="http://www.bb-brain.co.jp/tachiro/index-to-sitemap.html" >サイトの地図と説明< /A > < /td > < /tr > < /table > < /div > < BR >
上に示すのは、トップページのリンクリストの部分です。別のWebサイトへのリンクの部分は 「http://」 で始まるものですが、 それぞれをハードディスクのフォルダーにリンクするように書き換える作業が必要です。 しかも、このファイル(index.html)だけではありません。何10という数に上ります。 この作業を自動化するのです。 また、カウンターなどはイメージファイルにリンクする形に書き換えておきます。 いらない部分も削除することも必要です。以上の作業を 「sed」 にさせるのです。
次のファイルが 「sed」 のコマンドファイルです。置換命令が一まとめに記述されています。
# s|http://tachiro.client.jp|../Ninja-www|g s|http://tachiro2.client.jp|../Ninja-www2|g s|http://tachiro3.client.jp|../Ninja-www3|g s|http://tachiro4.client.jp|../Ninja-www4|g s|http://tachiro.hp.infoseek.co.jp|../isweb-www|g s|http://tachiro.kt.fc2.com|../ktweb-www|g s|http://www.[Bb][Bb]-brain.co.jp/tachiro|../BBbrain-www|g s|http://www.eonet.ne.jp/~tachiro|../eo-net-www|g # isweb conter s|"../isweb-www/cgi-bin/Count.cgi?df=tachiro"|"../isweb-www/img/count-img.gif"| # BBbrain conter /cgi-bin/count/count.pl?tacount4+5 s|"/cgi-bin/count/count.pl.*"|"../isweb-www/img/bbcounter-img.gif"| s|"http://www.bb-brain.co.jp/cgi-bin/count/count.pl.*"|"../isweb-www/img/bbcounter-img.gif"| # isweb script s|< script src="http://js3.infoseek.co.jp/bin/21/10667.js"> </script >|| s|< noscript > < a href="http://ax3.www.infoseek.co.jp/bin/go?1066721" target="_blank">|| s|< img src="http://ax3.www.infoseek.co.jp/bin/logo?1066721" border=0 > a <& gt</noscript >|| # Ninja script s|< script LANGUAGE="javascript" src="http://ctrl.shinobi.jp/hash.js" > < /script >|| s|< script LANGUAGE="javascript" src="http://ctrl.shinobi.jp/bin/25/00550.js" > < /script >|| # etc s|"getreader.gif"|"../isweb-www/img/getreader.gif"| s|"flash_get.gif"|"../isweb-www/img/flash_get.gif"| s|pluginspage="http://www.macromedia.com/shockwave/download/index.cgi?P1_Prod_Version=ShockwaveFlash"|| s|< img src="../isweb-www/cgi-bin/log/accesslog.cgi.*" >||
このファイルの中には 「s」 コマンドがたくさん並んでいます。「s」 コマンドは置換命令です。 例えば s|ああああ|いいい| の部分の意味は、文中の 「ああああ」 があれば 「いいい」 に置き換えるということです。 |の文字は / と置き換えることができます。s/ああああ/いいい/ でも良いのです。 s|かかかか|| は 「かかかか」 があれば4文字削除して詰めるのです。 置換命令の中に正規表現という表現形式が含まれています。
正規表現は奥が深いので軽く触れることにしましょう。ここで使っている正規表現は「.」、[Bb]だけです。 [Bb]は、 B でも b でもどちらでも良いということを表します。 「.」は、任意の文字という意味ですが、この場合「.」そのものを求めているだけです。正確には「¥.」と書くところです。
したがって、この場合では
「http://www.bb-brain.co.jp/tachiro」、「http://www.BB-brain.co.jp/tachiro」、「http://www.Bb-brain.co.jp/tachiro」....などを
「..//BBbrain-www」 に置き換えることになります。
最後の 「g」は同じ行中で繰り返せという意味です。
これで、リンクの貼り直し部分の書き換え作業のための 「sed」 のコマンドファイルは完成です。 ConvLink.sed として保存しておきます。
これで index.html というトップページのファイルの変換の作業終了です。ドライブ f: に書き換えられたファイルが出来ます。 以下、同様にその他のファイルも処理すればよいのですが、数十以上のファイルがあると大変ですが...。
ひとつのファイルの中のリンクの書き換えについては完了出来たのですが、 これを全てのファイルについて実行させなければなりません。そこで 「make」 コマンドが登場するのです。 次回は、 この 「make」 コマンド を使って、多数のファイルの書き換え処理を自動化する方法について紹介しましょう。