名前 | 形式 | 機能説明 | オプション | オペランド | 使用法 | 使用例 | 環境 | 終了ステータス | 属性 | 関連項目
sed ユーティリティはストリームエディタで、いくつかの テキストファイルを読み込み、 編集コマンドのスクリプトに従って内容を編集し、 結果を標準出力に書き出します。 スクリプトは、 script オペランド文字列、もしくは -e script と -f script_file オプションの引数を組み合わせたものから得られます。 sed ユーティリティはテキストエディタですが、バイナリ ファイルや、 ASCII NUL (¥0) 文字を含んだファイル、長い行を含んだファイルは編集できません。
以下のオプションを指定できます。
script は、 sed 用の編集コマンドです。 script のフォーマットの詳細については、下記の「使用法」を参照してください。-e オプションが 1 つだけあり、-f オプションがない場合、フラグ -e を省略することができます。
script_file で示すファイルからスクリプトを読み取ります。 このファイルには 1 行に 1 個の形式で編集コマンドが記述されています。
デフォルトの出力を抑止します。
-e と -f の両オプションは、それぞれ複数個指定できます。 コマンドはすべて、どこから得られたかに関わらず、 指定された順序でスクリプトに追加されます。
以下のオペランドがを指定できます。
内容を読み込んで編集するファイルのパス名。 file オペランドを複数個指定すると、指定した順序で読み込まれ、 連結されたものが編集されます。 file を 1 つも指定しないと、標準入力が用いられます。
編集コマンドのスクリプトとして用いる文字列。 アプリケーション側は、テキストファイルの規約に反するような script を指定してはなりません。 ただし最後は復帰改行文字でなくてもかまいません。
編集コマンドで構成されるスクリプトは、 1 行につき 1 つです。以下の形式を取ります。
[ address [ , address ] ] command [ arguments ]
最初のアドレス (address) の前およびコマンド (command) の前には、任意の数の空白を置くことができます。 また最初のアドレスの前には、任意の数のセミコロンを置くこともできます。
通常の操作では sed は、以下の作業を繰り返し行います。 まず (D コマンドの後に何かが残っている場合を除き)、 入力の 1 行 (行の終わりの復帰改行文字を除く) を「パターンスペース」にコピーし、 そのパターンスペースを選択する アドレスを持つコマンドがあれば、 該当するすべてのコマンドをパターンスペースに適用し、 その結果得られたパターンスペースを標準出力にコピーし (-n が指定されている場合を除く)、パターンスペースを削除します。 パターンスペースを標準出力または指定ファイルに書き出すたびに、sed はその後に復帰改行文字を加えます。
コマンドのいくつかは、「ホールドスペース」に パターンスペースの一部または全部を保存しておき、 以降の検索で使用することもできます。 各パターンスペースとホールドスペースには、最大 8192 バイトのデータを記録できます。
address は、空、 10 進数 (すべてのファイルの入力行を累積的にカウントする)、$ (入力の最終行をアドレスする)、または文脈アドレスのいずれかです。つまり、regexp(5) のマニュアルページで解説している /regular expression/ (正規表現) で構成されます。
アドレスを持たないコマンド行は、すべてのパターンスペースを選択します。
1 つのアドレスを持つコマンド行は、そのアドレスと一致するパターンスペースを選択します。
2 つのアドレスを持つコマンド行は、 最初のアドレスと一致する最初のパターンスペースから次のアドレスと一致する次のパターンスペースまでを含めた範囲 を選択します。その後、最初のアドレスを再び求めて、 このプロセスが繰り返されます (2 つめのアドレスが最初のアドレスが選択した行番号以下の場合、 最初のアドレスに対応する行だけが選択されます)。
通常、アドレス同士はコンマ (,) で区切りますが、セミコロン (;) を使うこともできます。
sed は、 regexp(5) のマニュアルページで述べられている正規表現をサポートし、 さらに以下の指定もサポートします。
文脈アドレスにおいて、 ¥cREc という構成 (c はバックスラッシュと復帰改行文字を除く任意の文字 ) は、 /RE/ と同じです。いずれも RE は正規表現です。 c が示す文字がバックスラッシュの直後に現れた場合、 それは文字そのものと見なされ、正規表現の終了とはなりません。 たとえば ¥xabc¥xdefx という文脈アドレスにおいて、 2 番目の x は文字 x を表しており、正規表現は abcxdef となります。
エスケープシーケンス ¥n は、パターンスペースに埋め込まれた復帰改行文字と一致します。 文脈アドレスの正規表現の中および置換コマンドの中では、 復帰改行文字を文字そのものとして使うことはできません。
否定機能 ! を使用すると、 編集コマンドは、選択されなかったパターンスペースだけに 適用されます ( 下記参照 ) 。
以下の機能一覧表に、各機能に指定できるアドレスの最大数を示します。
r コマンドと w コマンドには、それぞれ rfile と wfile という任意指定のパラメタがあり、コマンド文字とは 1 つ以上の空白文字で区切って記述します。
コマンド同士をセミコロン (;) で区切れば、複数のコマンドを 1 つのコマンド行に記述できます。
text 引数は、1 行ないしは複数の行で構成されます。後者の場合、最終行以外のすべての行は ¥ で終了し、復帰改行をエスケープします。 復帰改行文字をテキスト中に埋め込む場合、各々の前にバックスラッシュを付加しなければなりません。テキスト中のその他のバックスラッシュは、 削除されてその直後の文字が文字そのものとして扱われます。つまり テキスト中のバックスラッシュは、 s コマンドの置換文字列中のバックスラッシュと同様に扱われます。 また、バックスラッシュを使用して、 すべてのスクリプト行において行われる 行頭の空白文字およびタブの削除を防ぐこともできます。 rfile または wfile 引数は、コマンド行の末尾になければなりません。 これらの引数の前に空白文字がちょうど 1 つ必要です。 wfile パラメタを指定すると、そのファイルが存在しなければ最初に作成され、 存在していればその内容が書き換えられます。 最大 10 個の異なった wfile 引数を指定できます。
正規表現は、個々の行ではなく、文字列全体でマッチングされますが、 復帰改行文字は sed の正規表現においては ¥n と一致します。 正規表現内では復帰改行文字は使用できません。 また ¥n を使って、入力行の終わりで復帰改行文字をマッチングさせることは できないので注意してください。 パターンスペースにおいて、復帰改行文字は編集コマンド N の結果として現れます。
コマンドのうち 2 つは command-list の形式をとります。これは復帰改行で区切られたいくつかのコマンド の集まりです。以下にその形式を示します。
{ command command } |
{ の前には空白文字を置くことができ、後は空白にすることができます。 commands の前には空白を置くことができます。 最後の } の前は復帰改行文字でなければならず、さらに前後に空白文字を 置くことができます。中括弧の前後にも空白文字を置くことができます。 コマンドの前にも空白文字を置くことができますが、後には置けません。
次の表は、機能の一覧です。
最大 アドレス数 | コマンド | 説明 |
---|---|---|
1 | a¥ text | N コマンド実行または新サイクル開始による追加。次の入力行を読み取る前に text を出力します。 |
2 | b label | label を持つ : コマンドに分岐します。label が空の場合は、スクリプトの最後に分岐します。ラベルは最大 8 文字が一意であると認識されます。 |
2 | c¥text | 変更。パターンスペースを削除します。text を出力します。次のサイクルを起動します。 |
2 | d | パターンスペースを削除します。次のサイクルを起動します。 |
2 | D | パターンスペースの先頭セグメントから最初の復帰改行までを削除します。次のサイクルを起動します ( 下記の N コマンドを参照 ) 。 |
2 | g | パターンスペースの内容をホールドスペースの内容で置換します。 |
2 | G | ホールドスペースの内容をパターンスペースに追加します。 |
2 | h | ホールドスペースの内容をパターンスペースの内容で置換します。 |
2 | H | パターンスペースの内容をホールドスペースに追加します。 |
1 | i¥text | 挿入。text を標準出力に出力します。 |
2 | l | usr/bin/sed: 明白な形式でパターンスペースを標準出力に一覧表示します。非印字文字は 8 進数表記法で表示されます。長い行は複数行に分けて表示されます。/usr/xpg4/bin/sed: 明白な形式でパターンスペースを標準出力に一覧表示します。非印字文字は 8 進数表記法で表示されます。長い行は複数行に分けて表示されます。文字 ¥¥、 ¥a、 ¥b、 ¥f、 ¥r、 ¥t、 ¥v が対応するエスケープシーケンスとして出力されます。テーブル中にない非印字文字に関しては、各バイトごと (最上位ビットから) に 3 桁の 8 進数で、前にバックスラッシュが付加された形式で出力されます。1 バイトが 10 ビット以上のシステムでは、非印字文字のフォーマットは導入先により異なります。 長い行は折り返されます。折り返しの発生地点にはバックスラッシュと復帰改行文字が表示されます。折り返し地点の長さは不定ですが、出力装置に適した値です。各行の終わりは $ でマークされます。 |
最大 アドレス数 | コマンド | 説明 |
---|---|---|
2 | n | デフォルト出力が抑止されていなければ、パターンスペースを標準出力にコピーします。パターンスペースを入力の次の行で置換します。 |
2 | N | 入力の次の行をパターンスペースに追加し、復帰改行文字を埋め込みます。(現在の行番号が変わります) 。入力に次の行がなければ、N コマンド動詞はスクリプトの終わりに分岐し、新たなサイクルを開始せずに、パターンスペースを書き出さずに終了します。 |
2 | p | 出力。パターンスペースを標準出力にコピーします。 |
2 | P | パターンスペースの先頭セグメントから最初の復帰改行までを標準出力にコピーします。 |
1 | q | 終了。スクリプトの最後に分岐します。新しいサイクルを起動しません。 |
2 | r rfile | rfile の内容を読み取ります。次の入力行を読み取る前にこの内容を出力します。rfile が存在しないまたは読み取れないときは、エラーとはならず、あたかも空のファイルであるかのように扱われます。 |
2 | t label | テスト。入力行の最新の読み取りまたは t の実行以降に代入が行われている場合は、label を持つ : コマンドに分岐します。label が空の場合は、スクリプトの最後に分岐します。 |
2 | w wfile | 書き込み。wfile にパターンスペースを追加します。最初の w が 発生すると、wfile がクリアされます。後続の w が呼び出されると、追加されます。 sed コマンドが使用されるごとに、wfile が上書きされます。 |
2 | x | パターンスペースおよびホールドスペースの内容を交換します。 |
2 | ! command | 否定。アドレスによって選択されなかった行だけに command ( command が { の場合にはグループ ) を適用します。 |
0 | : label | このコマンドは何もしません。これは分岐するための b および t コマンド用のlabel を持っています。 |
1 | = | 現在の行番号を 1 行として標準出力します。 |
2 | {command-list} | パターンスペースが選択された場合のみ、command-list を実行します。 |
0 | 空のコマンドは無視されます。 | |
0 | # | スクリプトファイルの行の先頭文字が # の場合、その行全体が注釈行として扱われます。ただし、先頭行に # があり、# の後の文字が n の場合は唯一の例外で、デフォルトの出力が抑止されます。#n の後の残りの行も無視されます。スクリプトファイルには 1 つ以上の非注釈行が必要です。 |
最大アドレス数 | コマンド (stringsを使用) と説明 |
---|---|
2 | s/regular expression/replacement/flags パターンスペース内の regular expression に一致する文字列を replacement に置換します。正規表現 (regular expression) と置換文字列 (replacement) を区切るのに、スラッシュの代わりに、バックスラッシュと復帰改行以外の任意の文字を使用できます。正規表現および置換文字列内で、区切り文字を文字列の一部として使用したければ、前にバックスラッシュを付加してください。 置換文字列中のアンパサンド (&) は、正規表現に一致する文字列に置き換えられます。この & が持つ特殊な意味は、前にバックスラッシュを付加すれば無効にできます。数字 n の前にバックスラッシュを付加した ¥n は、対応する後方参照表現と一致するテキストに置き換えられます。置換文字列を先頭から最後まで走査する間に検出した個々のバックスラッシュについては、その直後の文字に特殊な意味があってもそれは無効となります。&、¥、数字以外の文字がそれぞれどのような特殊な意味を持つかは不定です。 flags には以下のものを、0 個以上指定できます。 n n= 1 - 512 。regular expression の n 番目の発生を置換します。 gグローバル。regular expression の最初に一致したものだけでなく、重ならないすべての例を置換します。g と n の両方を指定した場合、結果は保証できません。 p置換が行われた場合、 パターンスペースを出力します。 Pパターンスペースの先頭セグメントから最初の復帰改行までを、標準出力にコピーします。 w wfile書き込み。置換が行われた場合は、wfile にパターンスペースを追加します。最初の w は wfile をクリアします。それ以後の w 呼び出しは、追加処理となります。sed コマンドが使われるたびに、wfile は上書きされます。 |
2 | y/string1/string2/ 変形。string1 にあるすべての文字を string2 の対応する文字と交換します。string1 とstring2 の文字は同じ数でなければなりません。string1 中に同じ文字が複数回現れた場合の結果は定義されていません。2 つの文字列を区切るのに、スラッシュの代わりに、バックスラッシュと復帰改行以外の任意の文字を使用できます。string1 とstring2 内で、区切り文字を文字列の一部として使用したければ、前にバックスラッシュを付加してください。たとえば、y/abc/ABC/は、a を A で、b を B で、および c を C で置き換えます。 |
ファイルが 2 ギガバイト ( 231 バイト) 以上ある場合の sed の動作については、 largefile(5) を参照してください。
sed -n ' # Write non-empty lines. /./ { p d } # Write a single empty line, then look for more empty lines. /^$/ p # Get next line, discard the held <newline> (empty line), # and look for more empty lines. :Empty /^$/ { N s/.// b Empty } # Write the non-empty line before going back to search # for the first in a set of empty lines. p '
sed の実行に影響を与える環境変数 LC_COLLATE、LC_CTYPE、LC_MESSAGES、NLSPATH についての詳細は、 environ(5) を参照してください。
次の属性については attributes(5) のマニュアルページを参照してください。
awk(1), ed(1), grep(1), attributes(5), environ(5), largefile(5), regexp(5), XPG4(5)
名前 | 形式 | 機能説明 | オプション | オペランド | 使用法 | 使用例 | 環境 | 終了ステータス | 属性 | 関連項目