man sed の 内容 を 勝手に改悪したものです にゃんたろう
. H ; h ; G ; g ; N ; n ; D ; d ; P ; p ; q ; -n ; l ; t ; x ; = ; : ; b ; ! ;
名称
sed - ストリームエディタ
書式
sed [-an] command [file ...]
sed [-an] [-e command] [-f command_file] [file ...]
解説
sed は、指定されたファイル、ファイルが指定されていないときは標準入力を読
み込み、指定されたコマンドリストに従って入力に変更を加え、変更結果を標準
出力に書き出します。
sed への第一引数として単一のコマンドを指定することができます。複数のコマ
ンドを指定するときは、 -e または -f オプションで行います。どちらの場合で
も、入力に対して指定されたコマンドを、指定された順序で実行されます。
オプションは以下のとおりです。
-a 通常、 ``w'' 関数の引数となるファイルは、処理に先立って空のファイ
ルとして作成されます。 -a オプションを指定することにより、 ``w''
関数が入力に対して適用されるときまで、ファイルの作成が遅延されま
す。
-e command
入力に対しコマンド command を適用します。
-f command_file
入力に対し、ファイル command_file に記述されたコマンド列を適用し
ます。ファイル中の各コマンドは1行ごとに記述します。
-n デフォルトでは、入力行は、すべてのコマンドを適用した後に標準出力
up に書き出されます。 -n オプションはこの動作を禁止し、明示的な出力
コマンド (``p'' 等) が適用された入力のみを出力します。
sed のコマンドは以下の形式です。
[address[,address]]function[arguments]
最初の address の前と function の前に空白を置くことができます。
通常 sed は、入力ファイルの各行を改行コードを含めずに パタンスペースにコ
ピーし、順にコピーされた内容に適応する address 指定を持つコマンドを適用
し、パタンスペースの内容を改行を付与して標準出力へ書き出し、パタンスペー
スを消去するという動作を繰り返します。
いくつかの関数は、パタンスペースの一部または全部を保持できる ホールドスペ
ースを利用します。ホールドスペースの内容は、以降の処理に用いることができ
ます。
sed の address 表記
address の指定は必須ではありません。adderss は行番号(複数の入力ファイルに
対しては通し番号を用います)、入力の最後の行を示すドル記号 (``$'') 、コン
テキストアドレス(区切り記号にはさまれた正規表現)のいずれかです。
address 指定を持たないコマンドは、入力のすべての行に対して適用されます。
1つの address 指定を持つコマンドは、その address 指定にマッチした行にのみ
適用されます。
2つの address 指定を持つコマンドは、1つめの address にマッチした行から
2つめの address にマッチした行までのすべての行に対し適用されます(もし、
2つめの address が、1つめの address にマッチした行よりも小さな行番号を示
す行番号指定ならば、1つめの address がマッチする行のみにコマンドが適用さ
れます)。選択された範囲の次の行から、1 つめの address にマッチする行の検
索が再開されます。
エクスクラメーション関数 (``!'') を用いることにより、address で選択されて
いない範囲にコマンドを適用させることもできます。
sed の正規表現
sed で用いる正規表現は、Basic Regular expression (BRE、 regex(3) を参照)
です。BRE に加え、 sed では以下の拡張がなされています。
1. コンテキストアドレスにおいて、バックスラッシュ (``\'') と改行以外の
文字を正規表現の区切りとして用いることできます。区切り文字の直前に
バックスラッシュを置くことで、区切り文字をリテラルに解釈させることが
できます。たとえば、コンテキストアドレス \xabc\xdefx において、区切
り文字は ``x'' で、2つめの ``x'' は ``x'' という文字を表します。よっ
て、正規表現は ``abcxdef'' と解釈されます。
2. エスケープシーケンス \n は、パタンスペースに埋め込まれた改行にマッチ
します。しかし、address と置換コマンド中にリテラルな改行を含めること
はできません。
sed の正規表現には、デフォルト値の機能があります。もし、正規表現が空、す
なわち、区切りのみが指定されたなら、直前に用いられた正規表現が用いられま
す。直前の正規表現とは、最後に使われた address または置換コマンド中の正規
表現です。最後とは実行時の順番であり、指定されたコマンドの並びとは異りま
す。たとえば、 ``/abc/s//XXX/'' はパタン ``abc'' を ``XXX'' で置換しま
す。
sed の関数
以下のコマンドの一覧では、指定可能な最大 address 数を、[0addr]、 [1ad-
dr]、[2addrs] と表記しています。これらは、それぞれ最大 0、1、2 個の ad-
dress を指定することができることを意味します。
text 引数のテキストは複数行に渡ることができます。改行の直前にバックスラッ
シュを置くことで、テキストに改行を含めることができます。その他のバックス
ラッシュは取り除かれ、直後の文字がリテラルに解釈されます。
``r'' と ``w'' 関数は、オプショナルなファイル名引数をとります。ファイル名
は、関数名のあとに空白を置いてから指定する必要があります。引数として指定
されたファイルは、入力ファイルの処理を開始する前に作成(または、内容を消
去)します。
``b'' 、 ``r'' 、 ``s'' 、 ``t'' 、 ``w'' 、 ``y'' 、 ``!'' 、 ``:'' 関数
は、オプショナルな引数をとることができます。以下の一覧に、どの引数が関数
名のあとに空白を置いてから指定しなければならないかが記述してあります。
2つの関数は引数として関数リストをとります。関数リストは、以下の形式の改行
で区切られた sed 関数の羅列です。
{ function
function
...
function
}
``{'' の前後に空白を置くことができます。関数の前に空白を置くことができま
す。最後の ``}'' は、改行の直後に置く必要があります。 ``}'' の直前に空白
を置くこともできます。
[2addr] function-list
選択されたパタンスペースに関数リストを適用します。
[1addr]a\
text
次の入力行を読み込む直前に text を標準出力に書き出します。
[2addr]b[lable] up
指定された label を持つ ``:'' 関数に分岐します。label が指定され
ていない場合は、スクリプトの最後に分岐します。
[2addr]c\
text
パタンスペースを削除します。address が指定されていない場合と、1つ
だけ指定された場合は text が標準出力に書き出されます。2つの ad-
dress が指定された場合は、選択された範囲の最後行を処理した後に、
text が標準出力に書き出されます。
[2addr]d up
パタンスペースを削除し、次の繰り返しを開始します。
[2addr]D up
パタンスペースの最初の改行までの部分を削除し、次の繰り返しを開始
します。
[2addr]g up
ホールドスペースの内容をパタンスペースにコピーします。
[2addr]G up
ホールドスペースの内容をパタンスペースに追加します。
[2addr]h up
パタンスペースの内容をホールドスペースにコピーします。
[2addr]H up
パタンスペースの内容をホールドスペースに追加します。
[1addr]i\
text
標準入力に text を書き出します。
[2addr]l up
パタンスペースの内容を読めるような以下の形式で出力します。
backslash \
alert \a
form-feed \f
newline \n
carriage-return \r
tab \t
vertical tab \v
印字不可能な文字は、各バイトごとに ``\'' に続いて 3 桁の 8 進数で
出力されます。長い行は折り返して表示されます。折り返した部分は
``\'' に続く改行で示されます。各行の最後には ``$'' が出力されま
す。
[2addr]n up
もし、 (-n オプションによって) デフォルトの出力が停止されていない
なら、パタンスペースの内容を標準出力に書き出し、パタンスペースを
次の入力行で置き換えます。
[2addr]N up
パタンスペースに、次の入力行を追加します。このとき、元の内容との
間に改行を埋め込みます。現在の行番号が変化することに注意してくだ
さい。
[2addr]p up
パタンスペースの内容を標準出力に書き出します。
[2addr]P up
パタンスペースの最初の改行までの内容を標準出力に書き出します。
[1addr]q up
スクリプトの残りをスキップし、次の繰り返しを開始せずに終了しま
す。
[1addr]r file
次の入力行を読み込む直前に、ファイル file の内容を標準出力に書き
出します。
[2addr]s/regular expression/replacement/flags
パタンスペース内で、 regular expression に対応する部分を replace-
ment で置換します。バックスラッシュと改行以外の文字をスラッシュの
かわりに用いることができます。regular expression と replacement
の中に、リテラルな区切り文字を置きたいときは、バックスラッシュに
続けて区切り文字を置きます。
replacement 中のアンパサンド (``&'') は、regular expression に
マッチした文字列に置換されます。 ``&'' の前に ``\'' を置くこと
で、この特殊な ``&'' の解釈を禁止することができます。 ``\#''
(``#'' は数字) は、 regular expression の ``\(...\)'' で囲まれた
部分に置換されます(re_format(7) 参照)。
replacement に改行を含めることで、入力行を分割することができま
す。改行の直前に ``\'' を置くことで、replacement 中に改行を含める
ことができます。
s 関数の flags には、以下のものを複数指定できます。
0 ... 9
パタンスペースの N 回目までマッチした内容を re-
placement で置換します。
g pattern にマッチしたすべての内容を replacementで置
換します。
p 置換が行われたら、パタンスペースの内容を標準出力に
書き出します。もし、置換後の内容が置換前のものと同
一でも置換が行われたとみなします。
w file もし置換が行われたなら、パタンスペースの内容をファ
イル file に出力します。もし、置換後の内容が置換前
のものと同一でも置換が行われたとみなします。
[2addr]t [label] up
入力行が読み込まれてから、あるいは ``t'' コマンドが実行されてか
ら、置換が行われていれば、指定した label を持つ ``:'' コマンドへ
分岐する。label が指定されていない場合は、スクリプトの最後に分岐
する。
[2addr]w file
パタンスペースの内容をファイル file に追加する。
[2addr]x up
パタンスペースとホールドスペースの内容を交換する。
[2addr]y/string1/string2/
string1 に現れるパタンスペース中の文字を string2 の対応した文字に
置換する。たとえば、`y/abc/ABC/' はパタンスペース中の文字 a、b、c
を大文字に置換する。バックスラッシュと改行以外のすべての文字を区
切りとして用いることができる。 string1 、 stirng2 中では、`\' 直
後の改行以外の文字はリテラルに解釈され、`\n' は改行と解釈されま
す。
[2addr]!function up
[2addr]!function-list
関数または関数リストを、 address で選択されていない行に適用する。
[0addr]:label up
この関数は何も行わない。 ``b'' 、 ``t'' で用いるラベルを生成す
る。
[1addr]= up
行番号と改行を標準出力に書き出す。
[0addr]
空行は無視される。
[0addr]#
``#'' とそれ以降の文字は無視される(コメントとして扱われる)。ただ
し、行頭の 2 文字が `#n' の場合、デフォルトの出力が禁止される。こ
れは、コマンドラインに -n オプションを指定した場合と等価です。
sed は成功すれば、終了ステータス 0 を、失敗すれば 0 より大きな終了ステー
タスを返します。
関連項目
awk(1), ed(1), grep(1), regex(3), re_format(7)
歴史
sed は Version 7 AT&T UNIX で追加されました。
標準
本 sed の関数は IEEE Std1003.2 (``POSIX'') のスーパセットとなっているはず
です。
勝手に追加の 項目
class
にゃんたろう 拝!
2005年 4月 3日 (日) JST 作成