Sed (コンピュータ)

sed（セド）は、入力ストリーム（ファイルまたはパイプラインからの入力）に対してテキスト変換などのデータ処理をおこなうために使用されるプログラムである。名称「sed」は「ストリームエディタ」を意味する英語「」に由来する。
sedは、入力を行単位で読み取り、sedスクリプトと呼ばれるシンプルな命令文に従ってテキスト変換などの編集をおこない、また行単位で出力する。基本的には照合ルールに従い場合分けをおこなうフィルタと捉えることができる。オリジナル版のsedはベル研究所のマクマホンによって1973年前後に開発されたUNIXユーティリティで、現在ではコマンドラインをサポートするさまざまなオペレーティングシステムに搭載されている。
大量のテキストファイルに対して一括で定形の処理をおこなう場合に大きな威力を発揮する。正規表現に対応しており、ある条件の範囲内の文字列を探し出して処理することができる。特定の条件に合った文字列を検索し置換するなどの用途に用いる。
sedスクリプトの基本的な文型.
アドレスとコマンド.
アドレスとは入力データの行を指定するもので、行番号または正規表現パターンのことである。sedのスクリプトはアドレスとコマンドを並べて書いたものである。
 アドレス1 コマンド1
 アドレス2 コマンド2
 アドレス3 コマンド3
sedは基本的に、「アドレスで指定された条件を満たす入力データ行を、コマンドで処理して出力する」という動作を全データ行にわたり繰り返す。アドレス指定は省略することができ、その場合には、入力データの行番号や内容に関係なくコマンドが適用される。
例えば、下記のスクリプトは、入力データの10行目のみを出力するものである。
 codice_1
 codice_2
sedはデータを一行だけ読み込み、それをパターンスペースと呼ばれる場所に格納し、パターンスペースのデータに対してスクリプトを順に評価してゆく。まず、スクリプト「codice_1」を評価し、入力データ（パターンスペース）の行番号が10である場合に codice_4 コマンドによってパターンスペースのデータを出力する。そして次のスクリプト「codice_2」を評価し、入力データの行番号や内容に関係なく無条件に codice_2 コマンドを適用し、パターンスペースのデータを削除する。sedはスクリプトの終わりに到達すると、パターンスペースにデータが残っている場合、パターンスペースの内容を出力して、次の入力データの処理に移る。このスクリプトでは、スクリプトの2行目で、パターンスペースのデータが削除されているため、データの出力はせずに次の入力データの処理に移る。
条件によって次の行を読み込んだり、ホールドスペースと呼ばれるバッファに確保して後続の読み込みと合成することもできる。これらを利用するとフォーマット変換や特定の文脈パターンを抽出するなど、かなり高度な処理が可能となる。実際sedはチューリング完全な言語であることが証明されている。
y コマンド.
 y/検索文字/置換文字/
 codice_8
 codice_9
 codice_10
 codice_11
 codice_13
s コマンド.
 s/検索パターン/置換文字列/g
ホールドスペースの利用.
通常のワークエリアの事をパターンスペースと呼び、これと対になる裏バッファを持っており、これをホールドスペースと呼ぶ。
ホールドスペースには、次のコマンドが使用できる。
コマンドラインでの実行.
sedのインストールされているコマンドライン環境において、以下のように入力することで、データの処理がおこなえる（入力.txt を入力ファイル名、出力.txt を出力ファイル名とする）。
 sed -e 's/検索文字列/置換文字列/g' 入力.txt > 出力.txt
 sed -f スクリプト.sed 入力.txt > 出力.txt
特徴.
対話型テキストエディタと異なり、処理の経過・内容を逐次ユーザに確認することはない。非対話型であること、複数ファイルを一括して処理できることから、作業は対話型エディタによる逐次処理に比して極めて高速であり、生産性も高い。
プログラムのソースコードや、HTMLファイル中のハイパーリンクを一括して訂正するなどの処理に使用される。また、通常の文章の誤記・表記不統一などを一括して訂正するなどの用途にも使用され、たとえば日本語データの場合、正規表現を用いることで送り仮名を含む文章の処理などに用いられる。
現在ではWindowsやMacintoshなどにも移植されている。基本的にコマンドラインツールだが、これらのOS向けの版では、ユーザーがCUI（コマンドライン）に慣れていないことも考慮し、近年ではGUIで扱うためのツールも提供され始めている。