Ed (テキストエディタ)

ed（イーディー）は、UNIXオペレーティングシステム上のテキストエディタのひとつ。ラインエディタであり、編集作業をCLI上でいちいち命令を書いては行う方式のエディタであり、素朴なエディタである。UNIXの最初期の1969年からUNIXの一部として含まれていたエディタであり、現在もPOSIXに含まれ続けている。

 概要 
素朴なラインエディタであり、対話的エディタとしての使用に関しては1980年代以降にもっと便利な、vi、Emacs等のスクリーンエディタ（編集しているテキストが常時画面に表示されるエディタ）類が登場しそれらに取って代わられ、最近ではedがユーザによって対話的に使用されることは滅多に無いが、一部のシェルスクリプトで使われることはある。

edはUNIXの最初期から存在するパーツのひとつであり、事実上全てのバージョンのUNIXに装備されているので、様々なバージョンのUNIXで作業する人にとっては他のエディタが使えず困った場合でも一応は使えるという点で存在意義がある。他の一般的なエディタが動かないくらいの深刻な問題がシステムで発生した場合などではedが使用可能な唯一のエディタとなる可能性もあり、そのような場合に限ってedは対話的に使用される可能性がある。（ただしedが使用されることはかなり減っており、ほぼ不要と判断されることも多いので、最近のLinuxの一部のディストリビューションの標準状態ではすでにedを装備しなくなっているものもある。それでも必要なら後からインストールできる状態になっていることは一般的である。）

特徴
edはその簡潔さ（素朴さ）で有名で、結果を表示するということがほとんどない。例えば、edがエラー検出時やセーブせずに終了してよいか確認するときに生成するメッセージは単に"?"である。編集対象となっているファイル名や行番号も表示されず、要求されない限りテキストに変更を加えた結果すら表示しない。このような簡潔さは初期のUNIXにとっては適切であった。というのも、当時のコンソールはテレタイプ端末で文書の文字が表示される過程が見えるほど処理速度が低く、モデムも低速で、メモリやハードディスクはとても高価で記憶容量がきわめて少なかったからである。技術進歩によってこれらの制約がなくなるにつれて、より視覚的なスクリーンエディタが標準となっていった。

ed のコマンド（命令）は全て1文字である。たとえば「a」はappend命令であり指定行の後にテキストを追記する、「i」はinsertであり指定行の前にテキストを挿入する、「c」はchangeであり指定行の内容を変更する、「d」はdeleteであり指定行を削除する、「h」はhelpであり直前のエラー表示（わずか　"?" 1文字の表示）の原因の具体的な説明を表示する、「H」はエラー時にhelpを常に表示するhelpモードに切り替えるあるいはそれを解除する、「w」はwriteでありバッファー内のテキストデータをファイルに書き込む、「q」はquitのことでedを終了する、等々。

edの編集は、たとえファイル上のテキストデータを元に行う場合でも、一旦バッファー上つまり主メモリ上にコピーされたテキストデータに対して行われ、編集途中の内容はそのままではファイルには反映されない。編集結果をファイルに保存する場合は「w」コマンドで明示的に行う。wコマンドを使わずつまりファイル保存せずにedを終了すると、編集していた内容は失われる。

edは世界初の正規表現の実装のひとつでもある（それ以前には正規表現は数学の論文に出ていただけであった）。

 歴史と影響 
edはUNIXの初期の重要な3つの要素すなわちシェル、テキストエディタ、アセンブラのうちのひとつであり、1969年8月にケン・トンプソンによりAT&Tベル研究所のPDP-7上で開発された。

edは開発者ケン・トンプソンの出身校カリフォルニア大学バークレー校のQEDから影響を受けている。

edは後発のエディタであるおよびそこから派生したviに影響を及ぼした。edのよく使われる使い方は、UNIXコマンドgrepとsedにも影響を与えており（例えば使用例の置換コマンドはsedの使用法にそっくりである）、これらの影響はプログラミング言語AWKの中にもよく見て取れる。

edのコマンド群は他のラインエディタで模倣されている。例えば初期のMS-DOSのEDLINは似たような文法を採用しているし、多くのMUD（LPMudなど）のテキストエディタもed風の文法を採用している。しかし、これらのエディタはedよりも一般に機能が限定されている。

2008年8月23日、GNUプロジェクトの開発によるedがバージョン1.0を迎えた。

 使用例 
以下に ed を使用した例を示す。

 a
 ed is the standard Unix text editor.
 This is line number two.
 .
 2i
  
 .
 1,$l
 ed is the standard Unix text editor.$
 $
 This is line number two.$
 3s/two/three/
 1,$l
 ed is the standard Unix text editor.$
 $
 This is line number three.$
 w text
 65
 q

以上の結果として作成される、"text" という名前のテキストファイルの内容は次の通りである。

 ed is the standard Unix text editor.
  
 This is line number three.

空ファイルの状態で開始し、a コマンド（ed のコマンドは全て1文字)でテキストの追加(append)を行う。これにより ed は入力状態(input mode)となり、その後の入力文字列をファイルに追加していき、1つのドットだけからなる行を入力することで終了となる。この例ではドットで入力を終了するまでに2行のテキストが入力された。2i コマンドも入力状態に移行するコマンドであり、2行目の前にテキストを挿入する（この例では空行を入力）。コマンドには数値を前につけることができ、操作するテキストの行番号を指定する。

1,$l の l はリスト(List)コマンドである。このコマンドは範囲指定が前に付けられており、二つの行番号をカンマで区切って指定する（$ は最終行を意味する）。このコマンドを入力するとこれまでの入力内容が全て表示される。各行はドルマークで終わっており、各行末に空白が存在しても即座にわかるようになっている。

3行目の間違いは、置換(substitution)コマンド 3s/two/three/ で訂正できる。ここで 3 は訂正する行を示し、コマンドの後には置換元の文字列と置換先の文字列を指定する。再度全体を表示するために 1,$l を使用すると、内容が修正されている。

w text はバッファの内容を "text" というファイルに書き込み、書き込んだデータのバイト数を示す 65 という表示を出力する。q は ed の使用を終了する。

 他 
edが1980年代にはすでにほとんど使われなくなっていたことや、しかたなく使う状況に関する情報。

ビル・ジョイがしかたなくedを使った状況についての1984年時点での説明
エディタ戦争において、Emacs信奉者は「ビル・ジョイすら、もうviを使っていない」と言った。1984年のインタビューにおいて、ビル・ジョイはこのことについて説明している。そこで彼はサン・マイクロシステムズ内では初期のDTPソフトInterleafを使い、サン以外の場所を訪れたときには古いedを使っていたと述べている。viはほとんどどこにでもあったが、それら(独自に修正が加えられた)ローカルバージョンのviは彼にとって期待通りに動くと信頼できなかったのである。一方でedは修正が加えられたことがないので思った通り動作することが期待できた。そこで彼は（しぶしぶながら）viを使わずにedを使ったというわけである。