sed(1) FreeBSD 一般コマンドマニュアル

sed

前のページ 上に戻る 次のページ

sed


     sed [-Ean] [-e command] [-f command_file] [file ...]


解説

     sed は、指定されたファイル、ファイルが指定されていないときは標準入力を読
     み込み、指定されたコマンドリストに従って入力に変更を加え、変更結果を標準
     出力に書き出します。

     sed への第一引数として単一のコマンドを指定することができます。複数のコマ
     ンドを指定するときは、 -e または -f オプションで行います。どちらの場合で
     も、入力に対して指定されたコマンドを、指定された順序で実行します。

     オプションは以下のとおりです。

     -E      正規表現を、Basic Regular expression (BRE) ではなく、拡張 (モダ
             ン) 正規表現として解釈します。 re_format(7) マニュアルページは、
             どちらの書式も完全に記述しています。

     -a      通常、 ``w'' 関数の引数となるファイルは、処理に先立って空のファイ
             ルとして作成されます。 -a オプションを指定することにより、 ``w''
             関数が入力に対して適用されるときまで、ファイルの作成が遅延されま
             す。

     -e command
             編集コマンド command をコマンドリストに追加します。

     -f command_file
             ファイル command_file に記述されたコマンドをコマンドリストに追加
             します。編集コマンドは 1 行ごとに記述します。

     -n      デフォルトでは、入力行は、すべてのコマンドを適用した後に標準出力
             に書き出されます。 -n オプションはこの動作を禁止し、明示的な出力
             コマンド ( ``p'' 等)が適用された入力のみを出力します。

     sed のコマンドは以下の形式です。

           [address[,address]]function[arguments]

     最初の address の前と function の前に空白を置くことができます。

     通常 sed は、入力ファイルの各行を改行コードを含めずに パタンスペースにコ
     ピーし( ``D'' 関数の後でパタンスペースになにか残っている場合を除きます)、
     順にコピーされた内容に適応する address 指定を持つコマンドを適用し、パタン
     スペースの内容を改行を付与して標準出力へ書き出し、パタンスペースを消去す
     るという動作を繰り返します。

     いくつかの関数は、パタンスペースの一部または全部を保持できる ホールドスペ
     ースを利用します。ホールドスペースの内容は、以降の処理に用いることができ
     ます。


sed の address 表記

     address の指定は必須ではありません。address は行番号 (複数の入力ファイル
     に対しては通し番号を用います)、入力の最後の行を示すドル記号 (``$'') 、コ
     れた範囲の次の行から、1 つめの address にマッチする行の検索を再開します。

     エクスクラメーション関数 (``!'') を用いることにより、address で選択されて
     いない範囲に編集コマンドを適用させることもできます。


sed の正規表現

     sed で使われる正規表現は、デフォルトでは Basic Regular expression (BRE
     re_format(7) を参照) です。 sed は、 -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
             ても変わりません。

     [2addr]b[label]
             指定された label を持つ ``:'' 関数に分岐します。label が指定され
             ていない場合は、スクリプトの最後に分岐します。

     [2addr]c\
     text    パタンスペースを削除します。address が指定されていない場合と、1つ
             だけ指定された場合は text が標準出力に書き出されます。2つの
             address が指定された場合は、選択された範囲の最終行を処理した後
             に、text が標準出力に書き出されます。

     [2addr]d
             パタンスペースを削除し、次の繰り返しを開始します。

     [2addr]D
             パタンスペースの最初の改行までの部分を削除し、次の繰り返しを開始
             します。

     [2addr]g
             ホールドスペースの内容をパタンスペースにコピーします。

     [2addr]G
             改行文字とホールドスペースの内容をパタンスペースに追加します。

     [2addr]h
             パタンスペースの内容をホールドスペースにコピーします。

     [2addr]H
             改行文字とパタンスペースの内容をホールドスペースに追加します。

     [1addr]i\
     text    標準出力に text を書き出します。

     [2addr]l
             パタンスペースの内容を読めるような以下の形式で出力します。

                   backslash          \\
                   alert              \a
                   form-feed          \f
                   newline            \n
                   carriage-return    \r
                   tab                \t
                   vertical tab       \v

             印字不可能な文字は、各バイトごとに ``\'' に続いて 3 桁の 8 進数で
             出力されます (Most Significant Byte が先頭です)。長い行は折り返し
             て表示されます。折り返した部分は ``\'' に続く改行で示されます。各
             行の最後には ``$'' が出力されます。

     [2addr]n
             もし、( -n オプションによって)デフォルトの出力が停止されていない

     [1addr]q
             スクリプトの残りをスキップし、次の繰り返しを開始せずに終了しま
             す。

     [1addr]r file
             次の入力行を読み込む直前に、ファイル file の内容を標準出力に書き
             出します。

     [2addr]s/regular expression/replacement/flags
             パタンスペース内で、 regular expression に対応する最初の部分を
             replacement で置換します。バックスラッシュと改行以外の文字をス
             ラッシュのかわりに用いることができます。regular expression と
             replacement の中に、リテラルな区切り文字を置きたいときは、 ``\''
             に続けて区切り文字を置きます。

             replacement 中のアンパサンド (``&'') は、regular expression に
             マッチした文字列に置換されます。 ``&'' の前に ``\'' を置くこと
             で、この特殊な ``&'' の解釈を禁止することができます。 ``\#'' (
             ``#'' は数字)は、regular expression の後方参照(back reference)表
             現にマッチするテキストに置換されます( re_format(7) 参照)。

             replacement に改行を含めることで、入力行を分割することができま
             す。改行の直前に ``\'' を置くことで、replacement 中に改行を含める
             ことができます。

             s 関数の flags には、以下のものを0個以上指定できます。

                   0 ... 9
                           パタンスペースの N 回目にマッチした内容を replace-
                           ment で置換します。

                   g       先頭だけではなく、重なりあわない全てのマッチした内
                           容を replacementで置換します。

                   p       置換が行われたら、パタンスペースの内容を標準出力に
                           書き出します。もし、置換後の内容が置換前のものと同
                           一でも置換が行われたとみなします。

                   w file  もし置換が行われたなら、パタンスペースの内容をファ
                           イル file に追加します。もし、置換後の内容が置換前
                           のものと同一でも置換が行われたとみなします。

     [2addr]t [label]
             入力行が読み込まれてから、あるいは ``t'' 関数が実行されてから、置
             換が行われていれば、指定した label を持つ ``:'' コマンドへ分岐し
             ます。label が指定されていない場合は、スクリプトの最後に分岐しま
             す。

     [2addr]w file
             パタンスペースの内容をファイル file に追加します。

     [2addr]x

     [0addr]:label
             この関数は何も行いません。 ``b'' 、 ``t'' で用いるラベルを生成し
             ます。

     [1addr]=
             行番号と改行を標準出力に書き出します。

     [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 Std 1003.2 (``POSIX.2'') のスーパセットとなっている
     はずです。

FreeBSD 4.4                    December 30, 1993                   FreeBSD 4.4

ABELNET VPSサービス