SED(1V)                 ユーザ・コマンド                 SED(1V)



【名前】
     sed - ストリーム・エディタ

【形式】
     sed [ -n ] [ -e script ] [ -f sfilename ] [ filename ]...

【SYSTEM V 形式】
     /usr/5bin/sed [ -n ] [ -e script ] [ -f sfilename ]
                   [ filename ]...

【使用条件】
     System V バージョンのこのコマンドは、 System V ソフトウェ ア
     ・イ ン ストレーション・オプションとともに使用できます。オプ
     ション・ソフトウェアのインストール方法については「SunOSイ ン
     ストレーション・ガイド」を参照してください。

     なお JLE では、このコマンドは自動的にインストールされます。

【国際機能】
     sed は、 EUC 主コードセットおよび補助コードセットの文字を 処
     理できます。

     正規表現によるパターン検索は、バイト単位ではなく文字単位に行
     なわれます。

     script 内の注釈には、補助コードセットの文字が指定できます。

     現在の sed では、 y コマンドの string1 または string2 には、
     1 バイト文字だけが指定できます。複数バイト文字(漢字等)が指定
     されたときの結果は保証されません。

     b と : コマンドに使われる label は 7 バイト未満でなければ い
     けません (例えば、7 バイトでは一般の漢字は 3 文字までです)。

  [環境]
     環境変数 LC_CTYPE, LANG は、 sed の文字分類を制御 し ま す。
     sed  を 起動すると、これらの環境変数は LC_CTYPE, LANG の順に
     チェックされます。有効な値が検出されると、文字分類の残りの環
     境 変 数 は 無 視されます。たとえば、LANG を新しく設定しても
     LC_CTYPE の現在有効な文字分類に上書きすることはありませ ん。
     有 効 な値がない場合、シェルの文字分類はデフォルトで POSIX.1
     の C の locale に設定されます。

【機能説明】
     sed は、 filename として指定した一つ以上のファイル(省略時は
     標準入力)を、コマンドのスクリプトに従って編集し、標準出力に
     コピーします。

【オプション】
     -n   省略時の出力を抑制します。

     -e script
          script は sed の編集コマンドです。オプションが 1 つだけ
          で、  -f オプションがない場合には、フラグ -e は省略して
          も構いません。

     -f sfilename
          ファイル sfilename からスクリプトを読み込みます。

【使用法】
  [sed スクリプト]
     sedスクリプトは、下記の形式の編集コマンドを 1 行に 1 つず つ
     記述したもので構成されます。

          [ address [, address ] ] function [ arguments ]

     通常の操作では、 sed は(D コマンド実行後に何かが残ってい る
     場 合 を除き)循環的に入力行を「パターン・スペース」にコピー
     し、コマンドの address 部がそのパターン・スペースと一致す る
     す べてのコマンドを順番に (スクリプトの終わりに達するまで)に
     実行します。また、(-n の場合を除き)パターン・スペースを 標
     準出力にコピーして、パターン・スペースを削除します。

     コマンドのなかには、「ホールド・スペース」を使用して、後で検
     索するためにパターン・スペースの全部または一部を保存するコマ
     ンドもあります。

     address は、次のいずれかとします。

          指定した複数のファイルに対して通して付けた 10 進数の 行
          番号

          最後の入力行を指す $

          コンテキスト・アドレス(すなわち、ed(1) 形式の  /regu-
          lar expression/)

     さらに、以下の様な指定も可能です。

          \?RE?
               コンテキスト・アドレスでは、  \  ?regular  expres-
               sion?  (? は任意の文字)は、 /regular expression/
               と同じです。例えば、コン テ キ ス ト ・ア ド レ ス
               \xabc\xdefx では 2 番目の x はそれ自身を表しますの
               で、正規表現は abcxdef となります。

          \n   パターン・スペースの内部にある NEWLINE と一致し ま
               す。

          .    ピリオドは、パターン・スペースの最後の NEWLINE  の
               任意の文字と一致します。

          null アドレスのないコマンド行は、すべてのパター ン ・ス
               ペースを選択します。

          address
               そのアドレスに一致するパターン・スペースを選択しま
               す。

          address1, address2
               address1 に一致するパ ター ン ・ス ペー ス か ら、
               address2  に一致するパターン・スペースまでの範囲を
               選択します。 address1 が、 address2 で選択された行
               番号以上であれば、1 行だけが選択されます。

  [コメント]
     行の最初の空白でない文字が `#' である場合は、 sed はその行を
     コメント行として扱い、無視します。ただし、次の書式の行の場合
     は、 sedは、 -n フラグが指定された場合と同様に動作します。

          #n

  [機能]
     下記の機能のリストでは、各機能で指定できる最大アドレス 数 を
     かっこ内に示します。

     text 引数は、複数行から成ることができ、その場合、途中の行 の
     終 わ り には最終行の改行文字と区別するために、 \ を使用しま
     す。テキスト内のバックスラッシュは、 s コマンドの置換文字 列
     内 の バックスラッシュと同様に取り扱われ、各スクリプト行のス
     ペースやタブを削除するときに、行の先頭のにあるそれらを除去し
     ないようにする場合にも使用できます。

     rfilename や wfilename 引数は、コマンド行の最後に指定し、 必
     ず 先 頭 に ブ ラ ン クを 1 つだけ付けなければなりません。各
     wfilename は、処理開始前に作成さ れ ま す。 最 大  10  個 の
     wfilename 引数を指定することができます。

     (1)a\
     text        追加。次の入力行を読み取る前に text を出力 し ま
                 す。

     (2)b label  対応する label の `:' コマンドに分 岐 し ま す。
                 label が指定されていない場合は、スクリプトの終わ
                 りに分岐します。

     (2)c\
     text        変更。パターン・スペースを削除し、0 または 1  ア
                 ド レス、あるいは 2 アドレスで指定される範囲の終
                 りの時点で text を出力します。次のサイクルに移り
                 ます。

     (2)d        パターン・スペースを削除し、次のサイクルに移りま
                 す。

     (2)D        パターン・スペースの最初の NEWLINE までの部分 を
                 削除します。次のサイクルに移ります。

     (2)g        パターン・スペースの内容をホールド・スペースの内
                 容で置換します。

     (2)G        ホールド・スペースの内容をパターン・スペースの後
                 に追加します。

     (2)h        ホールド・スペースの内容をパターン・スペースの内
                 容で置換します。

     (2)H        パターン・スペースの内容をホールド・スペースの後
                 に追加します。

     (1)i\
     text        挿入。 text を標準出力へ出力します。

     (2)l        パターン・スペースをあいまいさのない形で標準出力
                 に出力します。非印字文字はバックスラッシュの付い
                 た 2 ないし 3 桁の 8 進数によって表示し、長い 行
                 は折り返しによって複数の行にします。

     (2)n        パターン・スペースを標準出力にコピーし、次の入力
                 行でパターン・スペースを置換します。

     (2)N        次の入力行を、埋め込んだ改行文字を付けてパターン
                 ・スペースの後に追加します(現在の行番号は変わり
                 ます)。

     (2)p        出力。パターン・スペースを標準出力にコピー し ま
                 す。

     (2)P        パターン・スペースの最初の NEWLINE までの部分 を
                 標準出力にコピーします。

     (1)q        終了。スクリプトの終わりに分岐します。新しいサイ
                 クルには移りません。

     (2)r rfilename
                 ファイル rfilename の内容を読み取り、次の入力 行
                 を取り込む前に標準出力に出力します。

     (2)s/regular expression/replacement/flags
                 パターン・スクリプトの regular expression と一致
                 す る部分が、文字列 replacement で置換されます。
                 `/' の代わりにどのような文字を使っても構い ま せ
                 ん。 詳 細 についてはed(1) を参照してください。
                 flags は、下記のものを 0 個以上組み合わせて指 定
                 できます。

                      n    n= 1 - 512。 n 番目の regular  expres-
                           sion だけを置換します。

                      g    広域置換。 regular expression に一致す
                           る文字列をパターン・スペース内の最初の
                           ものだけでなく、すべて(重なり合わな い
                           限り)置換します。

                      p    置換が行なわれた場合、パターン・スペー
                           スを出力します。

                      w wfilename
                           書き込み。置換が行なわれた場合、パター
                           ン ・スペースをファイル wfilename に追
                           加出力します。

     (2)t label  テスト。最後に行なわれた入力行の読み取りまたはコ
                 マ ンド t の実行後に置換が行なわれた場合、対応す
                 る label の `:' コマンドに分岐します。 label  が
                 指定されていない場合には、スクリプトの終わりに分
                 岐します。

     (2)w wfilename
                 書き込み。パターン・スペースをファイル wfilename
                 に追加します。

     (2)x        パターン・スペースの内容とホールド・スペースの内
                 容を入れ替えます。

     (2)y/string1/string2/
                 変換。string 1 内の文字がパターン・スペースに 現
                 れ る と、 対応する string2 内の文字に置き換えま
                 す。 string1 と string2 は 1 バイト文字の列 で、
                 その長さは同じでなければなりません。

     (2)! function
                 否定。アドレスで選択されない行に対してのみ func-
                 tion (または、 function が `{' の場合には、そこ
                 に含まれるコマンド群)を適用します。

     (0): label  このコマンドは何も実行しません。 b および t コマ
                 ン ドが分岐するための label を指定します。注:ラ
                 ベルの長さは 7 バイトまでとします。

     (1)=        現在行番号を行として標準出力に出力します。

     (2){        パターン・スペースが選択されたときだけ、対応する
                 `}' までのコマンド群を実行します。
                 コマンドは `;' で分割されます。

     (0)         空のコマンドを無視します。

  [SYSTEM V の sed スクリプト]
     最初のスペースとタブ文字はテキスト行から削除されません。

【診断】
     Too many commands
          コマンド・リストに 200 個を超えるコマンドが指定されまし
          た。

     Too much command text
          コマンド・リストが大きすぎて、 sed で処理できま せ ん。
          a, c, i コマンドのテキスト、 r コマンドで読み込んだテキ
          スト、 s コマンド内の正規表現または置換文字列、および y
          コマンドの変換テーブルは、すべて sed がデータを内部的に
          格納する必要があります。

     Command line too long
          コマンド行が 4000 バイトを超えました。

     Too many line numbers
          256 個を超える 10 進数の行数がコマンド・リストのアド レ
          スとして指定されました。

     Too many files in w commands
          10 個を超えるファイルがコマンド・リストの w コマンド ま
          たは s コマンドの w オプションとして指定されました。

     Too many labels
          50 個を超えるラベルがコマンド・リストに指定されました。

     Unrecognized command
          コマンドが sed によって認識できるコマンドではありません
          でした。

     Extra text at end of command
          コマンドの終わりの後に余分なテキストがあります。

     Illegal line number
          アドレスが、 10 進数の行数、あるいは $ でもなく、または
          コンテキスト・アドレスではありません。

     Space missing before filename
          r または w コマンド、または s コマンドの w オプ ショ ン
          と、 そのコマンドに指定されたファイル名の間にスペースが
          ありません。

     Too many {'s
          実行するコマンドのリストで { の数の方が } よりも多い。

     Too many }'s
          実行するコマンドのリストで } の数の方が { よりも多い。

     No addresses allowed
          アドレスを指定できないコマンドに対しアドレスが指定さ れ
          ました。

     Only one address allowed
          アドレスを1だけしか指定できないコマンドに対しアドレ ス
          が2つ指定されました。

     \digit out of range
          正規表現または s コマンドの置換文字列の &i>n の値が 9  よ
          り大きい。

     Bad number
          正規表現の範囲項目(書式 {n} または {n,m} の項目)の 終
          点の1つが数字ではありません。

     Range endpoint too large
          正規表現の範囲項目の終点の1つが 255 より大きい。

     More than 2 numbers given in \{ \}
          2つを超える終点を範囲式に指定しました。

     } expected after \
          範囲式に \ があり、その後に } が続きません。

     First number exceeds second in \{ \}
          範囲式の最初の終点が、2番目の終点よりも大きい。

     Illegal or missing delimiter
          正規表現の終わりの区切り文字がありません。

     \( \) imbalance
          正規表現で \) よりも \( の方が多いか、または \( より も
          \) の方が多い

     [ ] imbalance
          正規表現で ] よりも [ の方が多いか、または [ より も  ]
          の方が多い

     First RE may not be null
          アドレスまたは s コマンドの最初の正規表現が空です。

     Ending delimiter missing on substitution
          s コマンドの終わりの区切り文字がありません。

     Ending delimiter missing on string
          y コマンドの終わりの区切り文字がありません。

     Transform string not the same size
          y コマンドの2つの文字列の大きさが同じではありません。

     Suffix too large - 512 max
          何番目の正規表現を置き換えるかを指定する s コマンドの接
          尾辞が 512 よりも大きい。

     Label too long
          コマンドのラベル長さが 8 バイト以上です。

     Duplicate labels
          複数の : コマンドに同じラベルが指定されました。

     File name too long
          r または w コマンドまたは s コマンドの w オプションに指
          定されたファイル名が、1024 バイトを超えています。

     Output line too long.
          出力行が 4000 バイトを超えました。

     Too many appends or reads after line n
          20 個を越える a または r コマンドを行 n で実行しよう と
          しました。

     Hold space overflowed
          4000 文字を超える文字をホールド・スペースに格納しようと
          しました。

【ファイル】
     /usr/lib/locale/locale/LC_CTYPE
                    文字分類と変換テーブル

【関連項目】
    awk(1),ed(1),grep(1V),lex(1)

     Editing Text Files

【使用上の留意点】
     引数 -e と -f は合わせて 200 個までしか指定できません。さ ら
     に様々な内部的なサイズの制約があり、稀にオーバーフローするこ
     とがあります。この制約を乗り越えるためには、スクリプトを組み
     合 わせたり、分けたりするか、または sed コマンドのパイプライ
     ンを使用してください。