Sed (コンピュータ)
アドレスとは入力データの行を指定するもので、行番号または正規表現パターンのことである。sedのスクリプトはアドレスとコマンドを並べて書いたものである。
sedは基本的に、「アドレスで指定された条件を満たす入力データ行を、コマンドで処理して出力する」という動作を全データ行にわたり繰り返す。アドレス指定は省略することができ、その場合には、入力データの行番号や内容に関係なくコマンドが適用される。
例えば、下記のスクリプトは、入力データの10行目のみを出力するものである。
sedはデータを一行だけ読み込み、それをパターンスペースと呼ばれる場所に格納し、パターンスペースのデータに対してスクリプトを順に評価してゆく。まず、スクリプト「10 p」を評価し、入力データ(パターンスペース)の行番号が10である場合に p コマンドによってパターンスペースのデータを出力する。そして次のスクリプト「d」を評価し、入力データの行番号や内容に関係なく無条件に d コマンドを適用し、パターンスペースのデータを削除する。sedはスクリプトの終わりに到達すると、パターンスペースにデータが残っている場合、パターンスペースの内容を出力して、次の入力データの処理に移る。このスクリプトでは、スクリプトの2行目で、パターンスペースのデータが削除されているため、データの出力はせずに次の入力データの処理に移る。
条件によって次の行を読み込んだり、ホールドスペースと呼ばれるバッファに確保して後続の読み込みと合成することもできる。これらを利用するとフォーマット変換や特定の文脈パターンを抽出するなど、かなり高度な処理が可能となる。実際sedはチューリング完全な言語であることが証明されている。