7 コマンド ¶
ed のすべてのコマンドは1文字ですが、追加のパラメーターが必要なものもあります。コマンドのパラメーターが複数行にわたる場合、最後の行以外は、各行をバックスラッシュ(「\」)で終える必要があります。
一般に、1行に許されるコマンドは多くても1つです。ただし、ほとんどのコマンドは、コマンドが作用した最後の行を表示するため、表示接尾辞として「p」(print)、「l」(list)、「n」(enumerate)のいずれかを受け付けます。複数の表示接尾辞の指定は移植性がありませんが、ed は、同じものを繰り返さない任意の組み合わせを許し、その効果を組み合わせます。接尾辞の文字を指定する場合は、コマンドの直後に置く必要があります。
「e」「E」「f」「r」「w」コマンドは、コマンドの文字から1つ以上の空白文字で区切った、省略可能な file パラメーターを取ります。
割り込み(通常は Control-C)は、現在のコマンドを中止し、エディターをコマンドモードに戻します。
ed は次のコマンドを認識します。コマンドとともに、指定を省略した場合に使う既定のアドレスまたはアドレス範囲を、丸括弧内に示します。
(.)a指定行の後にテキストを追加します。このコマンドではアドレス「0」(ゼロ)が有効で、入力したテキストをバッファーの先頭に置きます。テキストは入力モードで入力します。現在アドレスは入力した最後の行のアドレスに、入力行がなければ指定行に設定されます。
(.,.)cバッファー内の行を変更します。指定行をバッファーから削除し、その位置にテキストを挿入します。テキストは入力モードで入力します。現在アドレスは、入力した最後の行のアドレスに設定されます。入力行がなければ、削除した最後の行の次の行の新しいアドレスに設定されます。削除行がもともとバッファーの末尾にあった場合は、新しい最終行のアドレスに設定されます。バッファーに行が残らなければゼロに設定されます。削除した行はカットバッファーにコピーされます。
(.,.)d指定行をバッファーから削除します。現在アドレスは、削除した最後の行の次の行の新しいアドレスに設定されます。削除行がもともとバッファーの末尾にあった場合は、新しい最終行のアドレスに設定されます。バッファーに行が残らなければゼロに設定されます。削除した行はカットバッファーにコピーされます。
e filefile を編集し、既定のファイル名を設定します。file を指定しない場合は既定のファイル名を使います。新しいファイルを読み込む前に、バッファー内のすべての行を削除します。file が存在しない場合は、バイト数の代わりに警告を表示し、バッファーは空のままになります。現在アドレスはバッファーの最終行のアドレスに設定されます。
file の前に感嘆符(!)がある場合は、その出力を読み込むシェルコマンドとして解釈されます(下のシェルエスケープコマンド「!」を参照)。この場合、既定のファイル名は変わりません。感嘆符で始まる名前のファイルを編集するには、名前の前に ./ を付けます。
バッファーの変更済みフラグが設定されていると、警告を表示します。その後、エラーやバッファーを変更するコマンドを挟まずに、もう一度「e」または「q」コマンドを与えると、警告なしで実行され、バッファーの変更は失われます。
E filefile を無条件に編集します。「e」コマンドと同様ですが、書き込んでいない変更を警告なしで破棄します。
f filefile が既存ファイルの名前であるかどうかにかかわらず、既定のファイル名を file に設定します。file を指定しない場合は既定のファイル名を表示します。file にはチルダ展開を行います。file が ~/ で始まる場合、~ はホームディレクトリ $HOME を指定するように展開されます。
(1,$)g/re/[I]command-listグローバルコマンド。ファイルに対して2回の処理を行います。最初の処理で、指定行のうち正規表現 re に一致するすべての行に印を付けます。接尾辞「I」は GNU 拡張で、
edが re による照合で大文字と小文字を区別しないようにします。次に、ファイルの先頭から末尾へ順に進み、印の付いた各行について、現在アドレスをその行のアドレスに設定して、指定した command-list を実行します。command-list が変更した行の印は解除されます。現在アドレスの最終値は、最後に実行した command-list の最後のコマンドが設定した値です。一致する行がなければ、現在アドレスは変わりません。command-list の実行は最初のエラーで停止します。command-list の最初のコマンドは「g」コマンドと同じ行に置く必要があります。command-list のほかのコマンドは、別々の行に置く必要があります。複数行の command-list では、最後の行以外をすべてバックスラッシュ(「\」)で終える必要があります。「g」「G」「v」「V」以外の任意のコマンドが使えます。「a」「c」「i」コマンドの入力モードを終了する「.」は、command-list の最終行になる場合は省略できます。既定では、command-list 内の改行だけの行は「p」コマンドと等価です。
edをコマンドラインオプション -G で起動した場合、command-list 内の改行は「.+1p」コマンドと等価になります。(1,$)G/re/[I]対話的グローバルコマンド。指定行のうち正規表現 re に一致する行を対話的に編集します。接尾辞「I」は GNU 拡張で、
edが re による照合で大文字と小文字を区別しないようにします。一致する各行について、その行を表示し、現在アドレスを設定し、ユーザーに command-list の入力を求めます。現在アドレスの最終値は、最後に実行したコマンドが設定した値です。一致する行がなければ現在アドレスは変わりません。command-list の形式は「g」コマンドと同じです。改行だけの行は空のコマンドリストとして働きます。「&」1文字で、直前の空でないコマンドリストを繰り返します。
h直近の「?」通知の理由を説明するヘルプメッセージを表示します。
Hヘルプメッセージの表示を切り替えます(上の「h」コマンドを参照)。ヘルプモードを有効にするときは、直近の「?」通知に対応するヘルプメッセージも表示します。既定ではヘルプメッセージを表示しません。
(.)i指定行の前にテキストを挿入します。このコマンドではアドレス「0」(ゼロ)が有効で、入力したテキストをバッファーの先頭に置きます。テキストは入力モードで入力します。現在アドレスは入力した最後の行のアドレスに、入力行がなければ指定行に設定されます。
(.,.+1)j指定行を結合し、結合したテキストを含む1行で置き換えます。アドレスを1つだけ指定した場合は何もしません。行を結合した場合は、置き換えた行をカットバッファーにコピーし、現在アドレスを結合した行のアドレスに設定します。それ以外の場合、現在アドレスは変わりません。
(.)kx指定行に小文字「x」で印を付けます。以後のコマンドでは、その行を「'x」(単一引用符の後に「x」)で指定できます。印は、その行が削除されるか、ほかの変更を受けるまで消えません。現在アドレスは変わりません。
(.,.)lリストコマンド。指定行を曖昧さのない形式で表示します。各行の末尾を「$」で示し、テキスト内の各「$」文字は、前にバックスラッシュを付けて表示します。特殊文字はエスケープシーケンスとして表示します。現在アドレスは表示した最後の行のアドレスに設定されます。
(.,.)m(.)バッファー内の行を移動します。指定行を、右側で指定した移動先アドレスの後に移動します。このコマンドでは移動先アドレス「0」(ゼロ)が有効で、指定行をバッファーの先頭に移動します。移動先アドレスが移動対象の行の範囲に入るとエラーになります。現在アドレスは移動した最後の行の新しいアドレスに設定されます。
(.,.)n番号表示コマンド。指定行を、各行の前に行番号とタブを付けて表示します。現在アドレスは表示した最後の行のアドレスに設定されます。
(.,.)p指定行を表示します。現在アドレスは表示した最後の行のアドレスに設定されます。
Pコマンドプロンプトのオンまたはオフを切り替えます。コマンドラインオプション -p でプロンプト文字列を指定しない限り、コマンドプロンプトは既定でオフです。既定のプロンプト文字列はアスタリスク(「*」)です。
qedを終了します。バッファーの変更済みフラグが設定されていると警告を表示します。その後、エラーやバッファーを変更するコマンドを挟まずに、もう一度「e」または「q」コマンドを与えると、警告なしで実行され、バッファーの変更は失われます。Qedを無条件に終了します。「q」コマンドと同様ですが、書き込んでいない変更を警告なしで破棄します。($)r filefile を読み込み、指定行の後に追加します。file を指定しない場合は既定のファイル名を使います。コマンド実行前に既定のファイル名がなければ、file に設定します。それ以外の場合、既定のファイル名は変わりません。このコマンドではアドレス「0」(ゼロ)が有効で、バッファーの先頭にファイルを読み込みます。現在アドレスは読み込んだ最後の行のアドレスに、読み込んだ行がなければ指定行に設定されます。
file の前に感嘆符(!)がある場合は、その出力を読み込むシェルコマンドとして解釈されます(下のシェルエスケープコマンド「!」を参照)。この場合、既定のファイル名は変わりません。感嘆符で始まる名前のファイルを読み込むには、名前の前に ./ を付けます。
(.,.)t(.)指定行を、右側で指定したコピー先アドレスの後にコピー(転送)します。コピー先アドレスが「0」(ゼロ)の場合は、バッファーの先頭にコピーします。現在アドレスはコピーした最後の行のアドレスに設定されます。
uバッファーを変更した最後のコマンドの効果を取り消し、現在アドレスをそのコマンドの前の値に戻します。取り消しでは、グローバルコマンド「g」「G」「v」「V」を単一のコマンドとして扱います。「u」は自身の逆操作であり、最後のコマンドだけを取り消せます。
(1,$)v/re/[I]command-list「g」コマンドと同様ですが、指定行のうち正規表現 re に一致しない各行に command-list を適用します。
(1,$)V/re/[I]「G」コマンドと同様ですが、指定行のうち正規表現 re に一致しない行を対話的に編集します。
(1,$)w file指定行を file に書き込みます。file の以前の内容は警告なしで失われます。既定のファイル名がなければ file に設定し、それ以外の場合は変更しません。ファイル名を指定しない場合は既定のファイル名を使います。バッファー全体を書き込むと、バッファーの変更済みフラグを解除します。現在アドレスは変わりません。
file の前に感嘆符(!)がある場合は、シェルコマンドとして解釈され、指定行をその標準入力に書き込みます(下のシェルエスケープコマンド「!」を参照)。この場合、既定のファイル名は変わりません。バッファーをシェルコマンドに書き込んでも、バッファーの変更済みフラグは解除されません。感嘆符で始まる名前のファイルに書き込むには、名前の前に ./ を付けます。
(1,$)wq file指定行を file に書き込み、続いて「q」コマンドを実行します。
(1,$)W file指定行を file の末尾に追記します。「w」コマンドと同様ですが、file の以前の内容を上書きしません。現在アドレスは変わりません。
(.)xカットバッファーの内容を、指定行の後にコピー(put)します。現在アドレスはコピーした最後の行のアドレスに設定されます。
(.,.)y指定行をカットバッファーにコピー(yank)します。現在アドレスは変わりません。カットバッファーは、その後の「c」「d」「j」「s」「y」コマンドで上書きされます。「e」または「E」で新しいファイルを読み込むと、カットバッファーは削除されます。
(.+1)znスクロール。指定行から一度に n 行を表示し、ウィンドウサイズを n に設定します。n を指定しない場合は現在のウィンドウサイズを使います。既定のウィンドウサイズは、画面の行数から2行を引いた値で、画面サイズを判定できない場合は 22 です。環境変数 LINES で初期ウィンドウサイズを設定できます。LINES と n は画面サイズによって制限されません。現在アドレスは表示した最後の行のアドレスに設定されます。
!command[2addr]!commandシェルエスケープコマンド。command を
sh経由で実行します。command の最初の文字が「!」の場合、直前の「!command」のテキストで置き換えます。したがって、「!!」は直前の「!command」を繰り返します。edは、command のバックスラッシュ(「\」)によるエスケープを処理しません。ただし、エスケープされていない各「%」を既定のファイル名で置き換え、エスケープされた各「%」からバックスラッシュを取り除きます。シェルの実行から戻ると、標準出力に「!」を表示します。現在アドレスは変わりません。1つ以上のアドレスを指定すると、指定行を command の標準入力に書き込み、その後、command の標準出力と標準エラーから読み込んだ行で置き換えます。2つのバイト数を表示します。1つは command に書き込んだバイト数、もう1つは command から読み込んだバイト数です。現在アドレスは読み込んだ最後の行のアドレスに、読み込んだ行がなければ最初の指定行の直前の行に設定されます。
(.,.)#コメントを開始します。その行の改行までの残りの部分は無視されます。行アドレスの後にセミコロンを指定した場合は、現在アドレスをそのアドレスに設定します。それ以外の場合、現在アドレスは変わりません。
($)=指定行の行番号を表示します。現在アドレスは変わりません。
(.+1)newline空コマンド。アドレスだけを指定すると、指定行を表示します。改行だけの行は「+1p」と等価です。現在アドレスは表示した行のアドレスに設定されます。