5-1 どんな環境でも使えるライン・エディタ - edエディタ -

ed,正規表現,スクリーン・エディタ,ライン・エディタ


 ファイルに文章を作ったりプログラムを作成できます。キーボードから文章やプログラムを1行ずつ入力していきます(下図)。

また,ファイルの内容を編集することもできます。たとえば,上のプログラム中の point という語をすべて ppp に変更することも簡単にできます。


 ここで紹介するエディタは ed という名のエディタです。ed を使ってファイルを作成したり編集するにはまず次のように入力します。

% ed ファイル名

ここで,指定したファイルがシステムにないファイルの場合は,新規にファイルを作成することになり,画面に ? とファイル名が表示されます。また,すでにあるファイルを指定すると,この指定ファイルを編集することになり,画面にファイル中の文字数が表示されます。
このファイルに文字を入力するときは,次のように a と入力してから1行ずつ入力していきます。

 最後にピリオドだけの行を入力するまでの5行が入力されました。ed を起動したときに指定したファイルが既存のファイルであった場合は,この入力された5行はもともとファイルにあった行の後ろに追加されます。もしも後ろに追加するのではなく,たとえば2行目と3行目の間に挿入したいときは,a の代わりに 2a と入力します。なお,MS-DOSに付いているエディタEDLINでは,このコマンドは I に相当します。ただし,厳密には ed の a は,指定行の直後への行の挿入を意味し,EDLINの I は,指定行の直前への行の挿入を意味します。

 ファイル内容を表示したいときは,p コマンドを使います。たとえば,2行目から5行目までを表示したいときは,

2,5p

と入力します。このようにedの各コマンドでは,前に行番号を付けることができます。行番号は,各行を1から順に番号付けしたものです。また,特別な番号として $ はファイルの最後の行を表し,.(ピリオド)は最後に編集した行を表します。ですから,すべての行を表示させたい場合は,

1,$p

と入力します。

 ある文字列を別の文字列に置き換えたいときは,s コマンドを使います(EDLINでは R コマンドに相当)。また,s コマンドの前に行番号を書くことで置き換える範囲を指定することもできます。たとえば,ファイル中のすべての行で,point という語を ppp に置き換えるには,

1,$s/point/ppp/g

と入力します(最後の g については,で説明します)。

 ある行を削除するには,d コマンドを使います。たとえば3行目を削除するときは,

3d

と入力し,また6行目より後ろをすべて削除するときは,

6,$d

と入力するわけです。

 作成したり編集したものを,ファイルへ書き出すときは w コマンドを使います。w とだけ入力すると,起動時に指定したファイルへ書き戻します。また w の後ろに新たなファイル名を書き,編集結果を別のファイルへ書き込むこともできます。

 edを終了させるコマンドは q です。


 UNIX環境では,さまざまな場面でエディタが使われます。たとえば,プログラムを作成するときや,文章を作成するとき,またいろいろなシステムの設定ファイルを作成するときにも用います。

 このように何をするにもまずエディタを使うため,UNIXを使っている時間の半分以上はエディタを使っているといってもいいでしょう。ですから,UNIXにはさまざまなエディタが用意されていて,場合により最適なものを使い分けできるようになっています。

一般に,エディタには次に示す二つの種類があります。

      −ライン・エディタ
エディタ−
      −スクリーン・エディタ

ライン・エディタは表示を1行ずつ行い,修正箇所の指定は行番号で行います。ここで紹介する ed はこのライン・エディタです。
これに対し,スクリーン・エディタというのは,いつも画面一杯に内容が表示されていて,修正箇所の指定はカーソルを上下左右に動かして行います。WIndowsでは使いやすいスクリーン・エディタが数多くありますが,UNIXには以降で述べる vi や Emacs といった強力なスクリーン・エディタが標準装備されています。

 スクリーン・エディタのほうがライン・エディタに比べて使い方がやさしく直感的で便利なのですが,スクリーン・エディタは画面制御を行うため,制御方法(たとえばカーソルの移動方法,特定の行の削除,スクロール方法など)をあらかじめ登録しておく必要があります。登録していない端末を使う場合や,タイプライタ形の端末を使う場合は,ライン・エディタを用いることになります(登録ファイルについては,5.2章ので説明します)。
ですから,ed は使い勝手は悪くてもどんな端末にも使える万能選手なのです。


 ed ではファイルの内容を一度ワークバッファという領域へ読み込み,この領域で編集を行います(下図)。


 読み込みは,ed を起動するときに既存ファイルを指定することで自動的に行います。また,次のように r コマンドを使っても読み込めます。

r ファイル名

 このワークバッファの内容をファイルへ書き込むのがで紹介した w コマンドです。

 文字列の置き換えを行う s コマンドは,次のように入力します。

行番号s/旧文字列/新文字列/[g]

最後の g を付けないと,置き換えは各行で最初に現れた旧文字列に対してだけ行われ,g を付けると各行のすべての文字列に対して行われます。また旧文字列には,正規表現という便利な表現方法が利用できます。

 この正規表現を使い,置換コマンドを用いて次のようなことができます。

1,$s/^[0-9][0-9]*//      行の先頭にある数字を消します。

たとえば,パソコンのBASICプログラムの行番号を消すときに利用できます。
1,$s/[0-9][0-9]*/NUMBER/g   すべての数字列を,NUMBERという文字に変えます。


edでは,編集作業はワーク・バッファにて行うため,edを終了する前に w コマンドでワーク・バッファの内容をファイルへ書き込んでおかないと,編集したものが失われてしまいます。
正規表現と,ファイル名置換のためのワイルド・カードとは非常に似ていますが,意味的には相当な違いがありますので注意してください。この一例を下表に示します。

意味 ワイルド カード 正規表現
英小文字以外の1文字 [!a-z] [^a-z]
任意の文字列 * .*   (注意:先頭にピリオドが付いている)
任意の1文字 ? .    (ピリオド)

特にありません。


【ed : line EDitor】 ファイルを編集するライン・エディタ