このページの内容

1 概要

GNU ed は行指向のテキストエディターです。対話的にもシェルスクリプトからも、テキストファイルの作成、表示、変更などの操作に使えます。制限付きの ed である red は、現在のディレクトリ内のファイルだけを編集でき、シェルコマンドを実行できません。Ed は Unix の最初のエディターで広く利用できるという意味で「標準」のテキストエディターです。ただし、ほとんどの用途では全画面エディターに取って代わられています。

GNU ed は Brian W. Kernighan と P. J. Plauger の著書『Software Tools in Pascal』(Addison-Wesley、1981年)に記述されたエディターのアルゴリズムに基づいています。

file 引数を指定して起動すると、file のコピーがエディターのバッファーに読み込まれます。変更はこのコピーに対して行われ、file 自体には直接行われません。ed の終了時に「w」コマンドで明示的に保存していない変更は失われます。対話モードでは、存在しない file は報告されますが、終了ステータスには影響しません。

編集にはコマンドモードと入力モードという2つの異なるモードがあります。起動直後の ed はコマンドモードです。このモードでは、標準入力からコマンドを読み取り、エディターのバッファーの内容を操作するために実行します。典型的なコマンドは次のようになります。

,s/old/new/g

これは文字列 old のすべての出現箇所を new に置き換えます。

「a」(追加)、「i」(挿入)、「c」(変更)などの入力コマンドを与えると、ed は入力モードに入ります。これがファイルにテキストを追加する主な方法です。このモードではコマンドを使えず、代わりに標準入力がエディターのバッファーに直接書き込まれます。行とは、改行文字までの、その文字を含むテキストです。1行にピリオド(「.」)を1つだけ入力すると入力モードを終了します。

バッファーに対する変更は、その内容が実際には変わらない場合でも、変更済みフラグを設定します。たとえば「s/a/a/」がその例です。空のファイルを読み込む(「r file」)場合や、バッファーを変更する前にコマンドを終了する(「anewline.newline」)場合はバッファーが変わらないため、変更済みフラグも設定されません。

ed のすべてのコマンドは、行全体または行の範囲に対して働きます。たとえば「d」コマンドは行を削除し、「m」コマンドは行を移動します。上の例のように、置換によって行の一部だけを変更することもできます。ただしこの場合も、「s」コマンドは一度に行全体に適用されます。

一般に、ed のコマンドは、0個以上の行アドレス、1文字のコマンド、必要に応じて追加のパラメーターから構成されます。つまり、コマンドの構造は次のとおりです。

[address[,address]]command[parameters]

address は、コマンドの対象となる行または行の範囲を示します。コマンドが受け付ける数より少ないアドレスを指定した場合は、既定のアドレスが補われます。