名前 | 形式 | 機能説明 | オプション | オペランド | 使用法 | 使用例 | 環境 | 終了ステータス | 属性 | 関連項目
sed ユーティリティは、テキストファイルを読み込み、編集コマンドのスクリプトに従って内容を編集し、結果を標準出力に書き出すストリームエディタです。スクリプトは、script オペランド文字列か、-e script と -f script_file のオプション引数の組み合わせで指定します。sed ユーティリティはテキストエディタですが、バイナリファイルや、ASCII NUL (\0) 文字を含んだファイル、長い行を含んだファイルは編集できません。
次のオプションを指定できます。
script は、sed の編集コマンドです。script のフォーマットの詳細については、「使用法」を参照してください。-e オプションを 1 つだけ指定し、-f オプションを指定しない場合、フラグ -e は省略できます。
script_file に指定したファイルからスクリプトを読み取ります。このファイルの各行には、編集コマンドが 1 つずつ記述されています。
デフォルトの出力を抑止します。
-e と -f の両オプションは、それぞれ複数個指定できます。コマンドはすべて、どのオプションで指定されたかに関係なく、指定の順序でスクリプトに追加されます。
次のオペランドを指定できます。
内容を読み込んで編集するファイルのパス名。file オペランドを複数個指定すると、指定した順序で読み込まれ、連結されたファイルを編集することになります。file を指定しないと、標準入力が読み込まれます。
編集コマンドのスクリプトとして使用する文字列。アプリケーション側で、テキストファイルの規約に反するような script を指定することはできませんが、文字列の最後の文字が復帰改行文字でなくてもかまいません。
スクリプトは、複数の編集コマンドで構成されます。スクリプト内の各行に、編集コマンドを 1 つずつ記述します。次のような書式を使用します。
[ address [ , address ] ] command [ arguments ]
最初のアドレス (address) の前と、コマンド (command) の前には、任意の数の空白文字を入力できます。また、最初のアドレスの前には、任意の数のセミコロンも入力できます。
通常、sed は、次の動作を繰り返します。
まず、D コマンドの実行後に何も残っていないことを確認し、入力行の 1 行を「パターンスペース」にコピーします。このとき、行末の復帰改行文字は含まれません。さらに、このパターンスペースを選択するアドレスを持つコマンドがあれば、そのコマンドをすべてパターンスペースに適用します。次に、その結果を標準出力にコピーし、パターンスペースを削除します。ただし、-n が指定されているときは、この処理は行いません。このようにしてパターンスペースを標準出力または指定ファイルに書き出すたびに、sed はその後に復帰改行文字を付け加えます。
コマンドのいくつかは、以前に取り出したパターンスペースを取り出しやすくするために、その一部または全部を「ホールドスペース」に保存します。パターンスペースとホールドスペースには、それぞれ最大 8192 バイトのデータを記録できます。
address には、10 進数 (すべてのファイルの入力行を累積的にカウントする)、$ (入力の最終行をアドレス指定する)、コンテキストアドレスのほか、空 (区切りのみ) を指定できます。address は、regexp(5) のマニュアルページで解説しているように、スラッシュで囲んだ正規表現 (/regular expression/) で構成されます。
アドレスのないコマンド行は、すべてのパターンスペースを選択します。
アドレスを 1 つ持つコマンド行は、そのアドレスと一致するパターンスペースを選択します。
アドレスを 2 つ持つコマンド行は、1 つめのアドレスと一致する最初のパターンスペースから 2 つめのアドレスと一致する次のパターンスペースまでの範囲を選択します。以降、同じプロセスが繰り返されます (2 つめのアドレスが、1 つめのアドレスで選択した行番号以下の場合、1 つめのアドレスに対応する行だけが選択されます)。
通常、アドレスとアドレスの間はコンマ (,) で区切りますが、セミコロン (;) を使うこともできます。
sed は、regexp(5) のマニュアルページで説明されている正規表現のほか、次の指定をサポートしています。
コンテキストアドレスでは、\cREc は /RE/ と同じ意味になります (c はバックスラッシュと復帰改行文字を除く任意の文字。RE は正規表現)。c に指定した文字がバックスラッシュの直後に現れた場合、これは正規表現の終了文字ではなく、リテラル文字と見なされます。たとえば、\xabc\xdefx というコンテキストアドレスでは、2 つめの x はリテラル文字 x です。この場合、正規表現は abcxdef になります。
エスケープシーケンス \n は、パターンスペースに埋め込まれた復帰改行文字と一致します。コンテキストアドレスの正規表現内や置換コマンド内では、復帰改行文字をリテラル文字として処理できません。
否定コマンド ! を使用すると、編集コマンドは、選択されていないパターンスペースに適用されます ( 下記参照)。
以下の表に、各機能に指定できるアドレスの最大数を一覧します。
r コマンドと w コマンドには、それぞれ rfile と wfile という任意指定のパラメータがあります。コマンド文字とパラメータの間は、1 つ以上の空白文字で区切ります。
複数のコマンドをセミコロン (;) で区切って、1 つのコマンド行に記述できます。
引数 text は、行で構成されます。この引数が複数の行で構成されている場合、最終行以外のすべての行は \ で終了し、復帰改行をエスケープします。復帰改行文字をテキストに埋め込む場合は、その前にバックスラッシュを付加してください。テキストに埋め込まれたその他のバックスラッシュは削除され、その直後の文字がリテラル文字として処理されます。つまり、テキストに埋め込まれたバックスラッシュは、s コマンドの置換文字列中のバックスラッシュと同様に処理されることになります。また、バックスラッシュを使用して、スクリプト行の行頭の空白文字やタブ文字が削除されるのを防ぐこともできます。rfile 引数や wfile 引数は、その前に空白文字を 1 つ入力して、コマンド行の末尾に置いてください。wfile パラメータを指定すると、そのファイルが作成されます。すでにファイルが存在していれば、その内容が書き換えられます。最大 10 個の wfile 引数を指定できます。
正規表現のマッチングは、行単位ではなく、文字列全体で行われます。ただし、sed の正規表現では、復帰改行文字は \n と一致します。このため、正規表現内では復帰改行文字は使用できません。また、入力行末尾の復帰改行文字のマッチングに、\n は使用できません。パターンスペースには、復帰改行文字は編集コマンド N の結果として現れます。
コマンドのうち 2 つは command-list の形式をとります。これは復帰改行で区切られたいくつかのコマンドの集まりです。以下にその形式を示します。
{ command command }
{ の前後には空白文字を置くことができます。また、command の前にも空白文字を置くことができます。最後の } の前は復帰改行文字でなければなりません。この復帰改行文字の前後にも、空白文字を置くことができます。さらに、中括弧の前後にも空白文字を置くことができます。コマンドの前にも空白文字を置くことができますが、後には置けません。
次の表は、機能の一覧です。
最大アドレス数 | コマンド | 説明 |
---|---|---|
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 は、対応する後方参照表現と一致するテキストに置き換えられます。置換文字列を先頭から最後まで走査する間に検出した個々のバックスラッシュについては、その直後の文字に特殊な意味があってもそれは無効となります。&、\、数字以外の文字がそれぞれどのような特殊な意味を持つかは不定です。 | |
行は、その中に復帰改行文字を使用することによって分割できます。アプリケーションは、replacement 内の復帰改行文字の前にバックスラッシュを置くことによって、これをエスケープする必要があります。置換文字列が、置換後の文字列と同一である場合も、置換が行われたことになります。 | |
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) のマニュアルページを参照してください。
名前 | 形式 | 機能説明 | オプション | オペランド | 使用法 | 使用例 | 環境 | 終了ステータス | 属性 | 関連項目