SED(1) FreeBSD 一般コマンドマニュアル SED(1)
名称
sed − ストリームエディタ |
書式
sed [−Ean] command [file ...] |
sed [−Ean] [−e command] [−f command_file] [−i extension] [file ...] |
解説 |
sed は、指定されたファイル、ファイルが指定されていないときは標準入力を読 み込み、指定されたコマンドリストに従って入力に変更を加え、変更結果を標準 出力に書き出します。 sed への第一引数として単一のコマンドを指定することができます。複数のコマ ンドを指定するときは、 −e または −f オプションで行います。どちらの場合で も、入力に対して指定されたコマンドを、指定された順序で実行します。 オプションは以下のとおりです。 |
−E
正規表現を、Basic Regular expression (BRE) ではなく、拡張 (モダ ン) 正規表現として解釈します。 re_format(7) マニュアルページは、 どちらの書式も完全に記述しています。 −a −e command −f command_file −i extension −n sed のコマンドは以下の形式です。 [address[,address]]function[arguments] 最初の address の前と function の前に空白を置くことができます。 通常 sed は、入力ファイルの各行を改行コードを含めずに パターンスペースに コピーし( ‘‘D’’ 関数の後でパターンスペースになにか残っている場合を除きま す)、順にコピーされた内容に適応する address 指定を持つコマンドを適用し、 パターンスペースの内容を改行を付与して標準出力へ書き出し、パターンスペー スを消去するという動作を繰り返します。 いくつかの関数は、パターンスペースの一部または全部を保持できる ホールドス ペースを利用します。ホールドスペースの内容は、以降の処理に用いることがで きます。 sed の address 表記 |
address の指定は必須ではありません。address は行番号 (複数の入力ファイル に対しては通し番号を用います)、入力の最後の行を示すドル記号 (‘‘$’’) 、コ ンテキストアドレス (区切り記号にはさまれた正規表現) のいずれかです。 address 指定を持たないコマンドは、すべてのパターンスペースを選択します。 1つの address 指定を持つコマンドは、その address 指定にマッチするすべての パターンスペースを選択します。 2 つの address 指定を持つコマンドは、address の両端を含んだ範囲を選択しま す。この範囲は、1 つめの address にマッチしたパターンスペースで始まり、そ の後に続く 2 つめの address にマッチしたパターンスペースで終わります。 2 つめの address が、1 つめの address で選択された行番号以下の番号である場 合、1 つめの address が指定する行のみ選択されます。 2 つめの address がコ ンテキストアドレスである場合、 sed は、 1 つめの address にマッチしたパ ターンスペースを 2 つめの address に再びマッチさせようとはしません。 sed は、選択された範囲の次の行から、1 つめの address にマッチする行の検索を再 開します。 エクスクラメーション関数 (‘‘!’’) を用いることにより、address で選択されて いない範囲に編集コマンドを適用させることもできます。 |
sed の正規表現
sed で使われる正規表現は、デフォルトでは Basic Regular expression (BRE re_format(7) を参照) ですが、 −E フラグを指定すると、拡張 (モダン) 正規表 現を使用可能です。正規表現に加え、 sed では以下の拡張がなされています。 |
1. コンテキストアドレスにおいて、バックスラッシュ (‘‘\’’) と改行以外の文字を正規表現の区切りとして用いることできます。区切り文字の直前にバックスラッシュを置くことで、区切り文字をリテラルに解釈させることができます。たとえば、コンテキストアドレス \xabc\xdefx において、区切り文字は ‘‘x’’ で、2つめの ‘‘x’’ は ‘‘x’’ という文字を表します。よって、正規表現は ‘‘abcxdef’’ と解釈されます。
2. エスケープシーケンス \n は、パターンスペースに埋め込まれた改行にマッ チします。しかし、address と置換コマンド中にリテラルな改行を含めるこ とはできません。 sed の正規表現には、デフォルト値の機能があります。もし、正規表現が空、す なわち、区切りのみが指定されたなら、直前に用いられた正規表現が用いられま す。直前の正規表現とは、最後に使われた address または置換コマンド中の正規 表現です。最後とは実行時の順番であり、指定されたコマンドの並びとは異なり ます。たとえば、 ‘‘/abc/s//XXX/’’ はパターン ‘‘abc’’ を ‘‘XXX’’ で置換し ます。 sed の関数 |
以下のコマンドの一覧では、指定可能な最大 address 数を、[0addr]、 [1addr]、[2addrs] と表記しています。これらは、それぞれ最大 0、1、2 個の address を指定することができることを意味します。 text 引数のテキストは複数行に渡ることができます。改行の直前にバックスラッ シュを置くことで、テキストに改行を含めることができます。その他のバックス ラッシュは取り除かれ、直後の文字がリテラルに解釈されます。 ‘‘r’’ と ‘‘w’’ 関数は、オプショナルなファイル名引数をとります。ファイル名 は、関数名のあとに空白を置いてから指定する必要があります。引数として指定 されたファイルは、入力ファイルの処理を開始する前に作成(または、内容を消 去)します。 ‘‘b’’, ‘‘r’’, ‘‘s’’, ‘‘t’’, ‘‘w’’, ‘‘y’’, ‘‘!’’, ‘‘:’’ 関数は、オプショナ ルな引数をとることができます。以下の一覧に、どの引数が関数名のあとに空白 を置いてから指定しなければならないかが記述してあります。 2つの関数は引数として関数リストをとります。関数リストは、以下の形式の改行 で区切られた sed 関数の羅列です。 { function function ... function } ‘‘{’’ の前後に空白を置くことができます。関数の前に空白を置くことができま す。最後の ‘‘}’’ は、改行の直後に置く必要があります。 ‘‘}’’ の直前に空白 を置くこともできます。 |
[2addr] function-list
選択されたパターンスペースに関数リストを適用します。 [1addr]a\ [2addr]b[label] [2addr]c\ [2addr]d [2addr]D [2addr]g [2addr]G [2addr]h [2addr]H [1addr]i\ [2addr]l backslash 印字不可能な文字は、各バイトごとに ‘‘\’’ に続いて 3 桁の 8 進数で 出力されます (Most Significant Byte が先頭です)。長い行は折り返し て表示されます。折り返した部分は ‘‘\’’ に続く改行で示されます。各 行の最後には ‘‘$’’ が出力されます。 [2addr]n [2addr]N [2addr]p [2addr]P [1addr]q [1addr]r file [2addr]s/regular expression/replacement/flags replacement 中のアンパサンド (‘‘&’’) は、regular expression に マッチした文字列に置換されます。 ‘‘&’’ の前に ‘‘\’’ を置くこと で、この特殊な ‘‘&’’ の解釈を禁止することができます。 ‘‘\#’’ ( ‘‘#’’ は数字)は、regular expression の後方参照(back reference)表 現にマッチするテキストに置換されます( re_format(7) 参照)。 replacement に改行を含めることで、入力行を分割することができま す。改行の直前に ‘‘\’’ を置くことで、replacement 中に改行を含める ことができます。 s 関数の flags には、以下のものを0個以上指定できます。 N g p w file [2addr]t [label] [2addr]w file [2addr]x [2addr]y/string1/string2/ [2addr]!function [0addr]:label [1addr]= [0addr] [0addr]# 環境変数 |
COLUMNS, LANG, LC_ALL, LC_CTYPE, LC_COLLATE の環境変数が、 environ(7) の 記述通りに、 sed の実行に影響します。 |
診断
ユーティリティ sed は、成功すると 0 で、エラーがあった場合は >0 で終了し ます。 |
関連項目
規格
sed ユーティリティは IEEE Std 1003.2 (‘‘POSIX.2’’) のスーパセットとなって いるはずです。 −E, −a, −i オプションは非標準の FreeBSD 拡張であり、他のオペレーティング システムでは使用できないかもしれません。 |
歴史
L. E. McMahon が記述した sed コマンドは Version 7 AT&T UNIX で登場しまし た。 |
作者
Diomidis D. Spinellis 〈dds@FreeBSD.org〉 |
バグ
値 0x5C (ASCII ‘\’) のバイトを含むマルチバイト文字は、 ‘‘a’’, ‘‘c’’, ‘‘i’’ コマンドへの引数では、誤って行継続文字として扱われてしまうかもしれ ません。マルチバイト文字は、 ‘‘s’’ と ‘‘y’’ コマンドでの区切り文字として 使用できません。 FreeBSD 10.0 July 17, 2004 FreeBSD 10.0 |