改行を削除したいねんけど ⅵで行末にある改行を削除しようとしても、カーソルは 改行文字の上に移重丿けることはないので、簡単にはいきま せん。 「じゃあ、でけへんのか ? 」 短気を起こさずに、もう一度よく考えてみましよう。 改行を削除するということは、下の行と連結したいわけ ですね。ここまで読んできた皆さんにはもうお分かりだと This is an apple ■ This is a monkey. ます。 この状態で J コマンドを実行すると、次のようになり This is a monkey. This is an applea ィじ、 田いますが、これは J コマンドで実現できます。 UNIX MAGAZINE 2001.9 more files to edit" のようなメッセージか見れます。つ この状態から :q でⅵを終了させようとすると、 れています。 で、 2 つのファイルか編集対象となっています」と表示さ 最下行には、「現在、 monkey というファイルを編集中 monkey: 2 files tO edit : unmodified: linel mhis is a monkey file. すると、画面は次のようになるはすです。 % vi monkey apple 次のようにします。 key と apple という 2 つのファイルを編集したいのなら 複数のファイルを同時に指定できます。たとえば、 mon- シェルのコマンド行でⅵを実行する場合、引数として 複数のファイル、開きたいんやけど しよう。 す。このスペースが不要なら、、、 2x " などとして削除しま コマンドでは、この例のようにあいだにスペースが入りま ドの直後に 2 行目の This がくるはすです。しかし、 J たんに改行・を削除しただけでは、 1 行目の行末のピリオ まり、編集対象のファイルがもう 1 つ残っているので終 了できないという意味です。ここで編集結果を破棄して強 制的に終了させるには、再度 :q を実行します ( あるいは、 最初から :q! として強制終了させます ) 。 最初のファイルを編集し保存してから次のファイルの 編集にとりかかる場合は、 :n (next) コマンドを実行しま す。すると、 Nhis is a apple file. apple: unmodified: line 1 となり、 2 番目のファイル ( この例では apple) の編集が 可能になります。 これとは逆に、、、さっき編集してたファイル、もう 1 回開きたいんやけど " という場合には、 :prev (previous) コマンドを入力します。 最後のファイルを編集、保存したら、通常どおり :q ま たは ZZ で終了できます。 ☆ 今回は、どんな UNIX システムでも使い始めたその日 から利用できるエデイタとして ed とⅵを紹介しました。 とくに、 UNIX の管理に携わる人は、これら 2 つのエディ タの使い方をぜひ習得してください。 こでは ed とⅵがもつ多彩な機 誌面の都合もあり、 能の一部しカ召介できませんでした。とくに、ⅵではマク ロなどを用いたさらに高度な使い方ができます。オンライ ン・マニュアルや参考文献を読み、達人への道を一滷線に ( ジグザグでもかまいませんか ) 突っ走りましよう。 ( やまぐち・すぐる、かたやま・よしあき 奈良先立斗 : 物支術大完大学 ) [ 赭文献 ] [ 1 ] B.W. Kernighan 、 R. Pike 著 ( 石田晴久監訳 ) CUNIX プ ログラミンク竟』、アスキー、 1985 年 [ 2 ] L. Lamb 著 ( 福謝夋博調『ⅵ入門』、アスキー、 1992 年 [ 3 ] WilIiam Joy and Mark Horton, "An lntroduction to Display Editing with Vi ” , ⅲ UNIX User's Supple- mentary Documents (USD) 4.4 Berkeley S0ftware Distribution, June, 1993 (http://docs.freebsd.org/ 44doc/usd/12. vi/paper. html) 49
特集 UN ー X の基礎知識 0 いへん楽になります (h 、 j 、 k 、 1 を基本とする指使いを習 得するには、 rogue というゲームで遊ぶ、いや勉強するの が一番の直です ) 。 コマンドの基礎 ⅵの起動・保存・終了、カーソル移動の次は編集コマンド です。さきはど述べたとおり、ⅵには図 8 に示した、、モー ド " があります。以下で説明する編集コマンドは、いすれ もコマンドモードで使います。 ・文字の挿入と追加 (i 、 I 、 a 、 A) カーソル位置の直前に文字を挿入したい場合は i (in- sert) を入力します。たとえは、以下の状態で i を入力 するとテキスト入力モードになります。 # This is a fiosts file. 続いて入力した文字は、、、 h " の前に挿入されます。 すから、こで第 simple 匡 " と入力すると、 で # This is a simple file. ↑入力された文字 となります。 テキスト入力モードからコマンドモードに戻るには、 ESC キーを押します。上の状態で ESC キーを押すと、 # This is a simpIeOhosts file. となり、コマンドモードに戻ります。 挿入されるので、次のようになっていなけれはなりま ます。 a コマンドでは、カーソル位置の直後に文字が と h のあいだに、、 simple" という文字列を挿入してみ i の場合と同じ例で説明しましよう。 a hosts' の a ドもあります。 a (append) がそれです。 もちろん、カーソル位置の後ろに文字を追加するコマン ルを行頭に移動させて i を入力せずにすみます。 めのものです。このコマンドを使えは、いちいちカーソ 現在行 ( カーソルのある行 ) の地頁に文字を挿入するた 文字の挿入は、 I コマンドでもおこなえます。これは、 36 # This is a ßosts file. ルは動きませんでしたね ) 。 に動き、テキスト入力モードになります ( i ではカーソ この状態で a と入力すると、カーソルが 1 文字ぶん右 # This 1S a&osts file. せん。 これは、カーソルを h に合わせて i を入力したとき と同しです。そして、テキストを入力していきます。 i に対して I があったように、 a にも対応する A コマ ンドがあります。これは、現在行の末尾に文字を追加す るためのコマンドです。これを使えば、いちいちカーソ ルを行末に移動させて a を入力する必喫はありません。 ・行の自加と挿入 ( 。、 O) カーソル行の下に行を追加したいときは、 o ( 叩 (n) コ マンドを使います。。を入力すると、次の例のように現 在行の下に新たな行が j 助日さカーソルがその行の先 頭に移動してテキスト入力モードになります。つまり、 、、 A 亟司 " としたのと同じことです。 ・とい 1 行目のさらに上には行を挿入できません。 。では、現在行の、、下 " に行が追加されます。しかし、 このあと、目的の文字を入力していきます。 ロ←テキスト入力モードになる This is a hosts file . ここで。を入力すると # This is a file. 字のオー ) コマンドです。例を挙げましよう。 でやってくれるコマンドがあります。それが O ( 大文 これではまどろっこしいですね。ⅵには、これを一発 行麪に合わせて i を入力すれはできます。しかし、 てコマンドモードに移ります。そして、カーソルを上の うのはウソです。ます、 1 行目で、、 I [ fi 祠 " を実行し これで、現在行の上にも下にも自由に行を追加・挿入で This is a hosts file . ロ←テキスト入力モードになる こで O を入力すると # This is a nosts file . UNIX MAGAZINE 2001.9 # This is a asts file . x を入力する # This is a fiosts file . います。 で x を入力すると、カーソル位置の文字が消えてしま 除するには、 x コマンドを使います。コマンドモード カーソル位置のテキスト ( 空白を含む ) を 1 文字だけ削 ・ 1 文字削除 (x) きるようになりました。
連続する何文字かを削除したいときは、 x の前に文字数 ( 数判を付けます。たとえば、、 4x " と入力すると、カー ソルイ立置の文字を含めて 4 文字か削除されます。たとえ # This is a 同 file . 4x を入力する # This is a file . は、次のようになるわけです。 ト入力モードに移って文字を挿入し、 ESC キーでコマ すればいいわけです (x で 1 文字削除し、 i でテキス 文字にカーソルを合わせ、、、図国入力文字列 [ 30 " と を組み合わせて対応することもできます。書き換えたい ことがあります。これは、こまでに説明したコマンド ミスタイプに気ついたときなど、 1 文字だけ修正したい ・ 1 文字奐 (r) たは D ) といった使い方もできます。 ーソル位置から行頭まで ( dO ) 、同しく行末まで ()$ ま d コマンドは行の削除だけでなく、単語単位 (dw) 、カ 行以降の 4 行か削除されます。 を入力します。たとえば、 、、 4dd " と入力すると、現在 の x の場合と同様、 dd の前に削除したい行数 ( 数字 ) 連続する何行かをまとめて削除したいときは、さきはど dd を入力する # This is a file . 現在行がまるごと削除されます。 dd コマンドの出番です。このコマンドを実行すると、 ていくのでは効率的とはいえません。そんな場合こそ、 不要な行をまるごと削除したいとき、いちいち x で消し ・行の削除 (dd) ができます。 て実行すると、その回数ぶんだけ自重加勺に実行すること このように、ⅵの多くのコマンドでは、数字を前に付け ーで、、 rh " と入力します。 の状態でカーソル位置の文字 m を h に変更したい場 # This is a aosts file . ンド 1 つで実現できます。たとえは、 ンドモードに戻る ) 。しかし、これも r (replace) コマ # This is a aosts file . ここで rh と入力すると 井 This is a nosts file . m が h に置き換えられ、 UNIX MAGAZINE 2001.9 コマンドモ ードに戻る r を入力しただけでは画面がまったく変化しないので、 不安になるかもしれません。しかし、置換のための準備 は整っています。続けて置換後の文字を入力すると、自 重加勺にコマンドモードに戻ります。 ・文字列の奐 (c 、 C) ときには、単語あるいは行単位で文字列を書き換えたい こともあります。そんなときにイ甦リなのが、 c (change) または C コマンドです。 c では、このコマンドに続いて、、どこまで " 書き換えた いかを指定します。たとえは、、、ある単語 ( 句読点や空 白で区切られた文字列 ) を置き換えたい " ときは、ます cw と入力します。 # This is a hosts 国 iIe. ここで cw と入力すると # This is a hosts 国 i1 $ . すると、上記のようにカーソル位置から単語の終り ( ピ リオドや空白文字は含まない ) までか置換の対象になり ます。このとき、置換する範囲の最後の文字が $ に変 わるので、示用が一一・目で分かります。この状態になった ら置換後の文字列を入力し、 ESC キーでコマンドモー ドに戻ります。 このほかにも、行末まで置換 ( c $ または C ) 、行頭まで 置換 (cO) といった使い方があります。さらに、連続す るれ個の単語をまとめて置換したいときは、 "ncw" の ように指定できます。 ・行のコピー & ペースト ()y 、 Y 、 p 、 P) 37 の記事では分かりやすいようにコピーという用語を使います。 7 ⅵの世界では、コピーではなく yank ( ャンク ) と呼びます。ただし 国 92.168.1.1 pr i vat e private 192 . 168.1. 1 # This is a hosts file . こで yy を実行し、続けて p を実行すると、 private 国 92.168.1.1 # This is a hosts file . ます。 (yank)7 と p (paste) 、 p です。例を挙げて説明し ( 貼付け ) できれ叫リです。そのためのコマンドが yy するときには、ある行をコピーして現在行にペースト 行か読くことがあります。こういったファイルを編集 設定ファイルなどでは、数文字だけが違う、よく似た
VMware 図 13 Linux への VMware コンソールのインストール # tar xzf VMware—cons01e—I . 0.1 ー 1098. tar ・ gz # cd vmware—console—distrib # . /vmware—install . pl You must read and accept the End User License Agreement to continue . Thank you ・ DO you accept? (yes/no) yes ( VMware のライセンス条件が表示されるので、一読して、 q " を入力する ) Press enter tO display it . [/usr/local/share/man] successfully. You can decide tO remove this software from your system at any The installation 0f VMware—cons01e 1 . 0.1 build ー 1098 for Linux completed want? [yes] is going tO create it, including needed parent directories. IS this what you The path "/usr/local/doc/vmware—console" does not exist currently. This script [/usr/local/doc/vmware—console] ln which directory dO you want tO insta11 the documentation files? ln which directory d0 you want t0 install the manual files? want? [yes] IS g01ng tO create it , = including needed parent directories. ls this what you The path "/usr/local/lib/vmware—console" does not exist currently. This script [/usr/local/lib/vmware—console] 工Ⅱ which directory dO you want to install the library files? [/usr/bin] /usr/local/bin 工Ⅱ which directory d0 you want t0 install the binary files? lnstalling the content Of the package. Creating a new installer database uslng the tar2 format . time by invoking the following command: "/usr/local/bin/vmware—uninstall—console. pl" 図 14 ESX サーパー上の仮想 PC に盛する言聢 VMware 肥 mo Lll iiJ.ad.jp Port: Password muser ・ assword 166 ワードを入力します。 Web インターフェイスにログインするときと同レヾス すべての欄に入力して [Connect] ボタンをクリックす ると、真っ白だった VMware コンソールのウインドウ か図 15 のように変化します。 Linux 版の VMware コンソールでは、上記のすべて の設定項目をコマンドライン・オフションて指定すること もできます。詳しくは、ヘルプメッセージ ( ー h オプショ ンで表示されます ) を参照してください。 VMware コンソールの GUI は Workstation とはは、 同しです。異なる点は、イ反想 PC を設定するインターフェ イス (Configuration Editor) がないことくらいなので、 使い方については説明しません。 UNIX MAGAZINE 2001.9
特集 UN ー X の基礎知識 0 図 8 vi のモード手ラ テキスト入力モード コマンド終了 ESC あるいは コマンドモード i 、 I 、 a 、 A 、 0 など ロ # This is a hosts file. 図 9 はじめ歩 ラストライン・モード ESC ワ、 ! ! など [ $CI が、これを表しています。もちろん、この場合も画 面には何も表示されません。 テキスト入力モードで間違った文字を入力してしまった ときは、 Backspace キーで修正します。ミスタイプにす ぐに気づいた場合はいいのですが、何文字か入力したあと で修正するのはすこし大変です。たとえば 4 つ前の文字を 修正するときは、 Backspace キーを 4 回押し、その後に 戻ったぶんの文字を入力しなおさなけれはなりません。つ んとちゃうの」 えるだけやから、 m のところで ESC キー、押したらええ 「なんで、もう 1 回入力せなあかんねんな。 m を h に変 のようにするわけです。 もう 1 回、 host と入力しなおす # This is a aost こで Backspace を 4 回 # This is a mostO # This is a コマンドモードに戻ると・・ m を h に変え、堕 SCI を押して # This is a hßst と思ったかもしれません。では倒地のとおりに 34 やはり、上首な努力を惜しんではいけません。 あれ ? カーソル以降の % st " が消えてしまいました。 入力を終えてコマンドモードに戻ったところで、この ファイルを保存してみましよう。ファイルを保存するに は、、、ラストライン・モード " で、 : w 川 et 田 rne " と入力 します ( ファイル名を指定して起動した場合は、 filename は省略してもかまいません ) 。 ます、、 : " ( コロン ) を入力すると、一番下の行が、 を入力します。たとえは、次のようにするわけです。 です ( 図 8 ) 。この状態で、保存のためのコマンドである w と変わります。これがラストライン・モードに移った合図 UNIX MAGAZINE 2001.9 ます ) 。 なコマンドがあります。これについては、のちほど説明し ( しつは、最後に保存した状態まて戻れる、、 : e ! " というイリ でいったん終了させ、再度ⅵを実行すればいいでしよう つに、そう思わなくてもいいですか ) 、強制終了コマンド 土重来、臥薪嘗月旦、新規蒔き直しや」と思ったときは ( べ こはひとつ、捲 れやら分からんようになってしもた。 編集していて、「あっちこっち直しとったら、どれがど 了コマンド : q ! で終了させます。 合には、保存コマンドを実行してから終了するか、強缶鮗 保存せすに終了しようとしているからです。このような場 というメッセージか表示されることがあります。これは、 NO write since 1ast change ( :quit ! overrides) きます。 q コマンドを実行したときに すると、すぐにシェルのコマンド・プロンプトか戻って ・ q Return します。 (quit) です。つまり、ラストライン・モードで q を入力 保存したら、次は終了です。そのためのコマンドは : q されました。 という意味です。これで、 hosts というファイル名で保存 ファイルを保存しました。行数は 1 、文字数は 24 です " のように変わるはすです。これは、、、 hosts という新しい "hosts" [New file] 1 line, 24 characters すると一番下の行が、 : w h0 st s [ 亘 6 新司
特集 UN ー X の基礎知識 0 となります。まず yy て現在行をバッファ ( - ヨ預かり 所 ) にコピーし、次に p で現在行の下にペーストしま す。現在行の上にペーストしたいときは、 p の代わりに P を使います。なお、 yy の代わりに Y コマンドを使っ ても同じ結果か得られます。 yy ではコピーの対象は、、行 " でしたが、 yw では 1 つ の単語、 y $ では行末まで、 yO では行頭からカーソル 位置までをコピーします。 yy ( または Y ) 、 yw では前 に数を付けて複数の行や単語をコピーすることも可能 p と P は yy や Y と対をなすコマンドというわけでは 、バッフアの内容 " をベーストするためのもので なく、 す。たとえは、 dd で消去した行もバッフアに保存され るので、 dd に続いて p を実行すると消去した行がペー ストされます。以下の例を見てください。 # This is a hosts file . 第 92 .168 . 1 . 1 private 192. 168 . 1 . 10 privateIO こで、、 ddp " を実行すると、 # This is a hosts f 土 1e . 192. 168. 1 . 10 privateIO 国 92 .168.1.1 private のように、現在行とその下の行とが入れ替わります。ま ず、 dd によって現在行か消去 ( バッフアに保存 ) され、 カーソル位置は下にあった行に移ります。続いて p が 実行さ現在行 ( もともとは下にあった行 ) の下に消 去された行がペーストされます。結果として、上下の行 が入れ替わるわけです。説明を読んだだけでは分かりに くいかもしれませんが、実際に試してみると、、なあーん や、こんなことやったんか " と糸断昇できるでしよう。 ・行の連結 (J) ファイルを編集しているときには、 2 行を 1 行にまと めたい場合もあります。そのようなときは、 J(join) を 使います。このコマンドを実行すると、次の例のように 現在行とその直下の行が 1 行に連結されます。 1 S pen . ThisOis a . 3 行を連結したいときは、 こで J を実行 38 、、 3J " とします。 1 S a pen . こで 3J を実行 ThisOis a pen. ・やり直し (u) 間違って x や d などで文字を消したり、 r や c などで 文字列を置換してしまった場合には、もとに戻さなけれ ばなりません。そんなときには、たったいま犯した過ち を、、なかったこと " にしてくれるⅡ ( und 。 ) コマンドを 使います。たとえば、次のように使います。 # This is a masts file . m を h に変えるつもりが、 。のところで rh と入力 *ts file . # Thi s i s a 慌てす騒がず u と入力 # This is a mßsts file . ただし、 u のご利益が受けられるのは直前の 1 回ぶんだ けです 8 。つまり、上の例の最終状態で u をもう 1 回 実行すると、、取消しの取消し " になり、 # This is a mßsts file . もう 1 回 u を実行 # This is a r&sts file . せつかくもとに戻したのに、またもとに戻ります ( やや こしい ) 。この場合は、もう 1 回 u を実行す川ま、、取消 しの取消しを取消し " ということでもとに戻ります。さ て、・何回戻ったでしようか。 その他の便利な機能 ここまでの説明で、テキストファイルの基本的な編集操 作ができるようになったはすです。以下では、、、知らんで もなんとかなるけど、知ってるとええことあるで " という 機能をいくつカ絲召介します。すでにとりあげたコマンドと 組み合わせれば、編集イ乍業がより効率的におこなえるよう になります。 ・文字列検索 ( / ) 11S UNIX MAGAZINE 2001.9 てください。 取り消すこともできます。言田は、オンライン・マニュアルなどを参照し ます。 p や p コマンドでは、これを利用して最大で 9 回前までク作を 8 x や d て削除した内容は、番号伺 - きでホールドバッフアにオ内されてい されます。それに続いて検索したい文字列を入力し、リ モードで、、 / " と入力すると、画面最下行に / か表示 もちろん、ⅵでも文字列の検索ができます。コマンド
図 12 行番号の表示 盟 s a s fi1e. private 192. 1 . 1. 1 private10 192.1 田 . 1.1 privatell 192 1 . 1.1 192.1 10.10 咄に y 19 1 10.20 apple 1 2 3 4 5 6 This a msts fi-le. private 92. 1 田 . 1.1 privatel 0 19 1 . 1.10 privatell 192 1 . 1. 11 19 1 10.10 mord".ey 192 1 . 10.20 apple :set 創衄 ber # This is a hosts file . 192. 168.1. 1 private privateIO 192 . 168.1. 10 というファイルでは、どこがタブでどこがスペースか分 こで、、 :set list" を実行すると、 かりません。 次のように変わります。 # This is a hosts file . $ 192 .168.1. EIprivate$ private10$ 192 . 168.1. 10 画面は % さえ知っていれは、「この括弧、どの括弧を閉してん カーソルか飛んでいきます。 で、 % を押してみましよう。すると、対応する括弧に { } 、 [ ] のいずれでも ) にカーソルを合わせます。そこ 使い方は簡単です。ます、対応を調べたい括弧 ( ( ) 、 ることがあります。そんなときの・じ強い味方が % です。 がどの括弧に対応しているのか分からなくてイライラす していると、 1 つの画面に孑刮瓜か数 - ・トイ固出てきて、どれ C 言語や perl 、さらに Lisp 系言語のプログラミングを ・括弧の対応を調べる ( % ) 解除する場合は : set nolist コマンドを実行します。 る頼りがいのあるコマンドです。 ど使わないかもしれませんが、いざというときに重宝す たんなるテキストファイルを編集しているときはそれは このほかに、行末は、、 $ " という記号て表されています。 3 行目はスペースによる空白であることが分かります。 意味する記号です。つまり、 2 行目はタブによる空白、 2 行目の空白が一 I " に変わっています。これはタブを 直前に実行したコマンドを繰り返したいことがありま しよう ( 「そんなん、あんただけやで」と言われそうで と、ディスプレイの前で叫ぶこともなくなるで ・繰返し ( ・ ) すか ) 。 ねん ! 」 UNIX MAGAZINE 2001.9 す。ーーイ列として、行の削除を考えてみましよう。連続 する複数行を削除するのなら、 dd コマンドの前に区 し回数を指定すればいいでしよう。しかし、、、ある行を 削除し、その 5 行下の行も削除したい " 場合には、ます dd て現在行を削除し、次いで jjjj または 4j として該 当する行へカーソルを移動したうえで、再度 dd を実行 することになります。 こで、キーストローク師鍵回数 ) を減らす方法があ ります。それカ区しのコマンド . ( ピリオド ) です。 れは、直前に実行したコマンドを繰り返します。した がって、さきほど 2 回目に dd で消去したところもピ リオドだけで消去できるわけです。 この例では、キーストロークは 1 つしか減りませんが、 もっと複雑なコマンドや糸区し回数が多い場合はかなり 節約できます。これで、健鞘炎からも解放されるでしょ う ( ホンマか ! ? ) 。 set コマンドによるオプション設定は便利ですが、ⅵを 起測けるたびにラストライン・モードで指定するのでは効 率的とはいえません。つねに同しオプションを設定してお きたいのであれは、ホーム・ディレクトリの下に . exrc とい うファイル (~/. exrc) を用意します ( 工竟変数 EXINIT で設定する力法もあります ) 。たとえは、いつも行番号を 表示させたいのなら、 ~/. exrc ファイルに次のように書い ておきます。 set number ⅵのなかで定するときとは違い、 : 頁の : は不要で す。複数のオプションを言当主する場合は、 1 行に 1 っすっ 書き並べていくといいでしよう倥白で区切って 1 行に列 挙することもできます ) 。今回は説明しませんが、 . exrc フ ァイルではさまざまな設定がおこなえます ( 基本的には、 ラストライン・モードで設定するものはすべて言当できま す ) 。マニュアルや参考文献などを手がかりに、 いろいろ なオプションを設定して試してみるといいでしよう。 これは使える ! ! 正規表現実践例 vi を使う本当の理山は、これから説明する、、正規表現に よるパターンマッチ " の機能を使いたいがためといえるか もしれません。ⅵでのパターンマッチは、 ed のものとは 41
連載 /JavaServer Pages—① samplel ・ jsp から生成された Java のソースコード 図 8 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 2 7 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 import import import import import lmport import import import import import import public . servlet . *; javax. servlet . http. * ; Javax. servlet ・ jsp ・ *; java. . * ; org. apache . j asper. runtime. * ; java. util. Vector; java. i0. ObjectInputStream; java. i0. Fi1eInputStream; Java. i0. IOException; java. iO . PrintWriter; Javax. servlet . jsp ・ tagext . * ; class ー 0002fsamp1e ー 00031 ー 0002ej spsamplel_j sp-O extends HttpJspBase { org ・ apache . jasper. JasperException ; static { public -0002fsamp1e-00031-0002ejspsamp1e1—jsp-0( ) { private static boolea 取—jspx—inited = false; public final void -j spx—init ( ) throws JasperException { public void —jspService(HttpServIetRequest request , HttpServIetResponse String —value = Ⅱ u11 ; this ; Obj ect page = JspWriter out = nuII ; Serv1etConfig config = nu11 ; Serv1etContext application = Ⅱ u11 ; HttpSession session = Ⅱ u11 ; PageContext pageContext = nuII ; JspFactory ー」 spxFactory = null ; throws IOException, Serv1etException { response) try { if ()j spx-inited —jspx-init() ; ー」 spx-inited false) { t rue ; —j spxFactory = JspFactory. getDefau1tFactory() ; response. setContentType("text/htmI;charset=8859—I") ; —jspxFactory. getPageContext(this, request , pageContext true, 8192 , true) ; application = pageContext . getServ1etContext ( ) ; config = pageContext . getServ1etConfig() ; session = pageContext . getSession() ; out = pageContext . getOut ( ) ; response , / / HTML / / begin [fi1e="/usr/home/tomcat—3.2. l/webapps/unimaga/samplel ・ j sp' from=(), の ;t。=(6,0)] out. write ( " く html>\r\n く head>\r\n く tit1e>Samp1e 1 く /title>\r\n く /head>\r\n く body> / / end / / begin [fi1e="/usr/home/tomcat—3.2. l/webapps/unimaga/samplel ・ j sp from=(6,2) ; t 。 = ( 9 , 0 ) ] UNIX MAGAZINE 2001.9 113
ところを、、 ex " にしてしまったようなケースです。そん なときは、次のようにすれはいいでしよう。 # This is a hosts file . たとえば、次のようなファイルがあったとします。 いう程度にご覧ください。 ありませんが、、、ほお、こんなこともできるんやね " と 最後に、実例を 1 っ挙げます。そうそうある場面では ・ちょっと複雑な奐 換えることができます。 などという意地悪な行があっても、うまく ex. に置き experience ex. たとえ、 ピリオドとスペースを付けて置換します。こうすれば、 バッフアに入れた ex を示します。そして、その後ろに 換後の文字列の指定 ( \ 1. 凵 ) のうち、、、 \ 1 " はホールド 定文字列 ex をホールドバッフアに入れるためです。置 うにしています。、、 \ ( " と " \ ) " を使っているのは、指 の後ろにスペースを入、、 ex. " が対象に含まれないよ してしまいます。そこで、、、 \ ( \ く ex \ 〉 \ ) 凵 / " として ex ただし、これではピリオドが付いている、、 ex. " にも合致 指定で、、 ex て始まって ex で終る " という未です。 exit 、 tex など ) を除外し、 ex という単語を示すための 、、 \ 〈 ex \ 〉 " は、文字列 ex を含むはかの単語 (text や 192. 168.1. 1 192. 168 . 1 . 10 192 . 168. 1 . 11 192. 168.10. 10 192. 168 .10 . 20 private privateIO privatell monkey apple このファイルを以下のように書き換えたいとします。 # This is a hosts file . 192.168.1.1 192 .168.1.10 192.168.1.11 192. 168.10. 10 192 . 168.10.20 private . naist ・ jp private privateIO . naist ・」 p privatelO privatell . naist. jp privatell monkey. naist ・ JP monkey apple . naist ・ jp apple つまり、 IP アドレスとホスト名とのあいだに、 FQDN 形式のホスト名を挿入するわけです。ポイントはホスト 名の扱いですが、これはホールドバッフアをうまく使え ばできます。たとえば、次のようにす川まいいでしよう ( 誌面の都合長で折り返しています。以ー - ド同様 ) 。 UNIX MAGAZINE 2001.9 : g た 192 / s / \ ( [ 凵 [ 凵 [CSØ]] * \ ) \ ( [a-z0-9] [a-z0-9] * \ ) $ / \ 1 \ 2 . naist ・ jp 凵 \ 2 / 、 192 で始まる行 " に含まれる、、 1 つ以にのスペースま たはタブ " をホールドバッファ 1 に入続く、、小文字 のアルファベットか数字からなる文字列 " をホールドバ ッファ 2 に入れます。このパターンを、、、ホールドバッ ファ 1 に続けて、ホールドノヾッファ 2 に、、 . naist. jp を 追加した文字列、そして空白を挟んでホールドバッファ 2 " という内容に置き換えることになります。これで、意 図どおりの置換ができます。 ここて紹介したのは、使用頻度が上交的高く役立ちそう な ( と和手に思った ) ものだけです。正規表現を用い たパターンマッチは、その場その場に応じて無限の組 - 午迂 があります。ますは基本をしつかり身につけ、自分なりに いろいろと試してみましよう。慣れてくると、パズルを解 くときのように「さて、どうやって攻略してやろうか」と 楽しくなってくるはすです。そうなれは、それまで 1 時 間かかっていた作業が 30 秒でできるようになるかもしれ ません ( 今回挙げた例をみれば、それもまんざら大げさで はないと思うのではないでしようか ) 。最終的には、憶え るために使った何倍もの時間を節約することができます。 ⅵを使っているときに、かならすや遭遇するであろう トラブルをいくつか紹介します。なかには、、トラブル " と は呼べないものも交しっていますが、よく受ける質間なの であわせてとりあげることにしました。 なお、本文中のエラー表示は和か使っているシステム上 のものです。冒頭でも述べたように、 ーロにⅵといって もさまざまなバージョン、不鶤頁があり、それぞれにエラー メッセージも違います。しかし、どのⅵでも似たような メッセージか表示されるはすですから、推測しながら読ん でください。 [open mode] って何 ? vi を起動した直後、画面の一番下に、、 [ 叩 en mode]" または「このターミナルではビジュアルモードは使えませ ん」といったメッセージか現蹊コロンだけか表示された 状態になることがあります。これは、ⅵがスクリーン・エ トラブル・シューティング 45
特集 UN ー X の基礎知識 0 図 3 1 2 4 5 6 7 8 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 行の追加・挿入・削除 % ed hosts 80 9 $-2,$P 1 i 192. 168 . 2 .12 192. 168. 10 192 . 168. 10 192 . 168 . 2 . 12 192 . 168 . 10 . 10 192 . 168 . 10 . . 10 ・ 20 20 priv12 monkey apple priv12 monkey apple # This is lp # This is 5p 5c 5dp 5p a hosts file . a hosts file . 192 . 168.2. 12 192 . 168. 10 192. 168. 10 192 . 168. 10 . 10 . 10 . 10 priv12 monkey S aru 図 3 の 13 行目を見てください。 a と同様、 i も前に数 字を付けることによって行窈旨定ができます。つまり、 の、、 li " では 1 行目の前に行を挿入しているわけです。 ~ 17 行目で 1 行目を表示させて石忍していますね。 16 さきほどの間題の正解は、、 li " でした、 ・というのは 曰列で、、、 0a " としても最初の行の前に挿入できます。も ちろん、 0 行という行はありませんが、このような指定を するときには使えます。 削除 削除は簡単です。 np コマンドなどを使って削除した い行へ移動し、 d コマンドを実行します (delete)o ある いは、前に数字を付けて特定の行を削除することもできま 、、 5d " では 5 行目か削除されます。図 3 の す。たとえは、 、、 5dp " を実行しています。これは、 5 行目 20 行目では、 を削除し、その時点での 5 行目を表示させるという命令で す。削除前 ( 19 行目 ) と削変 ( 21 行目 ) をくらべると、 変化しているのか分かります。 これ以外に、、、 m , れ d " という形式で m 行目かられ行 28 目までを削除することもできます。たとえは、 、、 1 , $ d " と するとファイル本か削除されます。また、さきほど説明 います。 5 行目では、同レヾターンを使って逆方向に検索 を末尾に向かって検索し、 3 行目で同じ検索を繰り返して 図 4 では、ます 1 行目で priv " という文字列を含む行 していると考えられます ) 。 ( 概念としては、ファイルの末尾と先頭がつながって循環 で検索し終えると、ふたたび初めから検索してくれます いすれの場合も、最後 ( ファイルの頁または末尾 ) ま 直前に指定した pattern を含む行をう曰頁に向かって検 〃 ter ・れを含む行をう巨頁に向かって検索 ? 〃佖れ et 、れ ? 直前に指定した〃 tet 、れを含む行を末尾に向かって検 〃観 7 、れを含む行を末尾に向かって検索 ときは以下のようにします。 機能があります。たとえは、文字列四、れを探したい ed には、指定した文字列パターンを含む行を検索する に便利なのが、、パターンマッチ " です。 行数を計算するのも面倒になってきます。このような場合 ファイルの行数か増えてくると、編集コマンドにえる パターンマッチの基礎 は、、 1 , $ c " とすればよいわけです。 ることができます。たとえば、ファイル本を書き直すに d コマンドと同様、 c コマンドでも行・数や範囲を指定す ています ) 。 ~ 26 行目がその実行イ列です (monkey を saru に置換し 削除し、その直前に行を挿入する働きをします。図 3 の 22 す (change)o これは、、 di" と同し意味、つまり現在行を ed には、行を置き換える c コマンドも用意されていま 行か削除されます。 したように d を単独で ( 行を指定せすに ) 実行すると現在 しています。 UNIX MAGAZINE 2001.9