このページの内容

2.2 コマンドラインオプション

sedを起動する完全な形式は次のとおりです。

sed OPTIONS... [SCRIPT] [INPUTFILE...]

sedには次のコマンドラインオプションを指定できます。

--version

実行中のsedの版と著作権表示を出力して終了します。

--help

これらのコマンドラインオプションとバグ報告先を簡潔にまとめた使用法を表示して終了します。

-n
--quiet
--silent

既定では、sedはスクリプトを処理する各サイクルの最後にパターンスペースを表示します(sedの動作を参照)。これらのオプションは自動表示を無効にし、sedはpコマンドで明示的に指示されたときだけ出力を生成します。

--debug

入力されたsedプログラムを正規形で表示し、プログラムの実行に注釈を付けます。

$ echo 1 | sed '\%1%s21232'
3

$ echo 1 | sed --debug '\%1%s21232'
SED PROGRAM:
  /1/ s/1/3/
INPUT:   'STDIN' line 1
PATTERN: 1
COMMAND: /1/ s/1/3/
PATTERN: 3
END-OF-CYCLE:
3
-e script
--expression=script

scriptにあるコマンドを、入力の処理時に実行するコマンドの集合へ追加します。

-f script-file
--file=script-file

ファイルscript-fileに含まれるコマンドを、入力の処理時に実行するコマンドの集合へ追加します。

-i[SUFFIX]
--in-place[=SUFFIX]

このオプションはファイルを直接編集することを指定します。GNU sedは一時ファイルを作成し、標準出力の代わりにそのファイルへ出力を送ることで、これを実現します1。

このオプションは-sを暗黙に指定します。

ファイルの末尾に達すると、一時ファイルを出力ファイルの元の名前へ改名します。拡張子を指定した場合は、一時ファイルを改名する前に、古いファイルの名前をその拡張子で変更し、バックアップを作成します2。

次の規則に従います。拡張子に*が含まれない場合は、現在のファイル名の末尾に接尾辞として追加します。拡張子に一つ以上の*文字が含まれる場合は、各アスタリスクを現在のファイル名に置き換えます。これにより、バックアップファイルに接尾辞の代わりに(または接尾辞と併せて)接頭辞を付けたり、元のファイルのバックアップを別のディレクトリに置いたりできます。ただし、そのディレクトリはすでに存在している必要があります。

拡張子を指定しなければ、バックアップを作らずに元のファイルを上書きします。

-iは省略可能な引数を取るため、その直後に別の短いオプションを続けないようにしてください。

sed -Ei '...' FILE

バックアップ用の接尾辞を付けない-E -iと同じです。FILEは、バックアップを作らず直接編集されます。

sed -iE '...' FILE

これは--in-place=Eと同じで、FILEのバックアップとしてFILEEを作成します。

-nと-iの併用には注意してください。前者は行の自動表示を無効にし、後者はバックアップを作らずファイルを直接変更します。不用意に使い、明示的なpコマンドも指定しなければ、出力ファイルは空になります。

# WRONG USAGE: 'FILE' will be truncated.
sed -ni 's/foo/bar/' FILE
-l N
--line-length=N

lコマンドの既定の折り返し幅を指定します。0(ゼロ)は、長い行を折り返さないことを意味します。指定しなければ70になります。

--posix

GNU sedにはPOSIX sedへの拡張がいくつかあります。移植可能なスクリプトを書きやすくするため、このオプションは追加コマンドも含め、このマニュアルに記載されたすべての拡張を無効にします。ほとんどの拡張は、POSIXで定められた構文の範囲外にあるsedプログラムを受け付けるものですが、一部の拡張(バグの報告で説明するNコマンドの動作など)は実際に規格に違反します。後者の種類の拡張だけを無効にしたければ、変数POSIXLY_CORRECTを空でない値に設定できます。

-b
--binary

このオプションはすべてのプラットフォームで使用できますが、OSがテキストファイルとバイナリーファイルを区別する環境でだけ効果があります。MS-DOS、Windows、Cygwinのように区別がある場合、テキストファイルの行はキャリッジリターンとラインフィード文字で区切られ、sedには末尾のCRは見えません。このオプションを指定すると、sedは入力ファイルをバイナリーモードで開き、この特別な処理を要求せず、ラインフィードで行が終わるものとして扱います。

--follow-symlinks

このオプションはシンボリックリンクをサポートするプラットフォームでだけ使用でき、-iも指定した場合にだけ効果があります。その場合、コマンドラインで指定したファイルがシンボリックリンクなら、sedはリンクをたどり、リンクの最終的な参照先を編集します。既定の動作ではシンボリックリンクを切り離すため、リンク先は変更されません。

-E
-r
--regexp-extended

基本正規表現の代わりに拡張正規表現を使います。拡張正規表現はegrepが受け付けるもので、通常はバックスラッシュが少なくなるため、読みやすくなることがあります。かつてはGNU拡張でしたが、-Eはその後POSIX規格にも追加されました(http://austingroupbugs.net/view.php?id=528)。移植性を考慮する場合は-Eを使ってください。GNU sedは何年も前から未記載のオプションとして-Eを受け付けており、*BSDのsedも長年-Eを受け付けています。ただし、-Eを使ったスクリプトは、ほかの古いシステムへ移植できない可能性があります。拡張正規表現を参照してください。

-s
--separate

既定では、sedはコマンドラインで指定されたファイルを、一つの連続した長いストリームとして扱います。このGNU sed拡張では、それぞれを別々のファイルとして扱えます。範囲アドレス(「/abc/,/def/」など)は複数のファイルにまたがれず、行番号は各ファイルの先頭を基準とし、$は各ファイルの最終行を指し、Rコマンドが読み込むファイルは各入力ファイルの処理開始時に先頭へ戻されます。

--sandbox

サンドボックスモードでは、e/w/rコマンドは拒否されます。これらを含むプログラムは実行されず、中止されます。サンドボックスモードでは、sedがコマンドラインで指定された入力ファイルだけを操作し、外部プログラムを実行できないことが保証されます。

-u
--unbuffered

入力と出力のバッファリングを、実用上可能な限り小さくします。「tail -f」のようなものから入力を受け取り、変換後の出力をできるだけ早く見たい場合に特に役立ちます。

-z
--null-data
--zero-terminated

入力を、改行の代わりにゼロバイト(ASCIIの「NUL」文字)で終わる行の集合として扱います。「sort -z」や「find -print0」などのコマンドと併用して、任意のファイル名を処理できます。

コマンドラインに-e、-f、--expression、--fileのどのオプションも指定されていなければ、オプションでない最初の引数を、実行するscriptとして扱います。

上記の処理後にコマンドライン引数が残っていれば、処理する入力ファイルの名前と解釈します。ファイル名「-」は標準入力ストリームを表します。ファイル名を指定しなければ、標準入力を処理します。


(1)

これは=、a、c、i、l、pなどのコマンドに当てはまります。wまたはWコマンドを特殊ファイル/dev/stdoutと併用すれば、標準出力へ書き込むことは引き続き可能です。

(2)

実際に出力が変わったかどうかにかかわらず、GNU sedはバックアップファイルを作成することに注意してください。