この記事には参考文献や外部リンクの一覧が含まれていますが、脚注による参照が不十分であるため、情報源が依然不明確です。適切な位置に脚注を追加して、記事の信頼性向上にご協力ください。(2019年8月)
この記事で示されている出典について、該当する記述が具体的にその文献の何ページあるいはどの章節にあるのか、特定が求められています。ご存知の方は加筆
をお願いします。(2019年8月)sed登場時期.mw-parser-output .plainlist--only-child>ol,.mw-parser-output .plainlist--only-child>ul{line-height:inherit;list-style:none none;margin:0;padding-left:0}.mw-parser-output .plainlist--only-child>ol li,.mw-parser-output .plainlist--only-child>ul li{margin-bottom:0}
1974年
開発者リー・マクマホン
影響を受けた言語ed
テンプレートを表示
sed(セド)は、入力ストリーム(ファイルまたはパイプラインからの入力)に対してテキスト変換などのデータ処理をおこなうために使用されるプログラムである。名称「sed」は「ストリームエディタ」を意味する英語「stream editor」に由来する[1]。
sedは、入力を行単位で読み取り、sedスクリプトと呼ばれるシンプルな命令文に従ってテキスト変換などの編集をおこない、また行単位で出力する[1]。基本的には照合ルールに従い場合分けをおこなうフィルタと捉えることができる。オリジナル版のsedはベル研究所のマクマホンによって1973年前後に開発されたUNIXユーティリティ[2][1][3]で、現在ではコマンドラインをサポートするさまざまなオペレーティングシステムに搭載されている[1]。
大量のテキストファイルに対して一括で定形の処理をおこなう場合に大きな威力を発揮する。正規表現に対応しており、ある条件の範囲内の文字列を探し出して処理することができる。特定の条件に合った文字列を検索し置換するなどの用途に用いる[4]。 アドレスとは入力データの行を指定するもので、行番号または正規表現パターンのことである。sedのスクリプトはアドレスとコマンドを並べて書いたものである[4]。アドレス1 コマンド1アドレス2 コマンド2アドレス3 コマンド3: sedは基本的に、「アドレスで指定された条件を満たす入力データ行を、コマンドで処理して出力する」という動作を全データ行にわたり繰り返す。アドレス指定は省略することができ、その場合には、入力データの行番号や内容に関係なくコマンドが適用される。 例えば、下記のスクリプトは、入力データの10行目のみを出力するものである。10 pd sedはデータを一行だけ読み込み、それをパターンスペースと呼ばれる場所に格納し、パターンスペースのデータに対してスクリプトを順に評価してゆく。まず、スクリプト「10 p」を評価し、入力データ(パターンスペース)の行番号が10である場合に p コマンドによってパターンスペースのデータを出力する。そして次のスクリプト「d」を評価し、入力データの行番号や内容に関係なく無条件に d コマンドを適用し、パターンスペースのデータを削除する。sedはスクリプトの終わりに到達すると、パターンスペースにデータが残っている場合、パターンスペースの内容を出力して、次の入力データの処理に移る。このスクリプトでは、スクリプトの2行目で、パターンスペースのデータが削除されているため、データの出力はせずに次の入力データの処理に移る。 条件によって次の行を読み込んだり、ホールドスペースと呼ばれるバッファに確保して後続の読み込みと合成することもできる。これらを利用するとフォーマット変換や特定の文脈パターンを抽出するなど、かなり高度な処理が可能となる。実際sedはチューリング完全な言語であることが証明されている。
sedスクリプトの基本的な文型
アドレスとコマンド
y コマンドy/検索文字/置換文字/パターンスペースのある一文字を検索し置換するためには、行頭が y から始まるコマンドを用いる。これは一文字単位で検索置換をおこなうので、文字列(単語など)については用いることができない。なお、sedスクリプトにおいてはスラッシュ (/) で挟まれた文字ないし文字列を対象とするので、末尾のスラッシュを省略するとエラーになる。y/○/●/y/△/▲/y/□/■/このように記述すると、○→●、△→▲、□→■ というように、一文字ずつ置き換える。だがこれは、次のように一行にまとめることができ、スクリプトの行数を減らすことができる。y/○△□/●▲■/y コマンドは、先頭から一対一で実行していくため、y/○△□/●/というように、前と後とで字数が合っていない場合はエラーになる。
s コマンドs/検索パターン/置換文字列/g単語や文章などに照合するパターンを検索・置換する場合には、s から始まるコマンドを用いる。s の次の文字(上の例では / 文字)が、検索パターンや置換文字列の区切りになる。上記のように末尾に g と指定することで、検索パターンにマッチ(照合)するすべての文字列を置換する。検索文字列は正規表現で指定する。正規表現が区切り文字を含むときは、\ 文字を前置きする。上記のように / が区切り文字のとき、/ 文字を検索するなら、\/ と指定する。置換文字列では、& 文字や \ 文字が特別な意味をもつ。& 文字は、照合した文字列に置き換わる。& 文字自体に置換するときは、\& と指定し、\ 文字自体に置換するときは、\\ と指定する。