3.7 GNU sed固有のコマンド
これらのコマンドはGNU sed固有なので、移植性を損ねても問題ないと確信できる場合にだけ、注意して使ってください。GNU sed拡張の有無を確認したり、標準的なsedではサポートされないものの、よく必要になる処理を行ったりできます。
-
e [command] このコマンドでは、シェルコマンドからの入力をパターンスペースへパイプで取り込めます。引数がなければ、
eコマンドはパターンスペースにあるコマンドを実行し、その出力でパターンスペースを置き換えます。末尾の改行は除去されます。引数を指定した場合は、
eコマンドはそれをコマンドとして解釈し、その出力を出力ストリームへ送ります。コマンドは複数行にまたがることができ、その場合は最後の行以外の各行をバックスラッシュで終えます。どちらの場合も、実行するコマンドにNUL文字が含まれていれば、結果は未定義です。
rコマンドとは異なり、コマンドの出力は直ちに表示されることに注意してください。rコマンドの場合は、現在のサイクルの最後まで出力を遅らせます。-
F 現在の入力ファイル名を、末尾の改行とともに表示します。
Q [exit-code]このコマンドにはアドレスを一つだけ指定できます。
このコマンドは
qと同じですが、パターンスペースの内容を表示しません。qと同様に、呼び出し元へ終了コードを返せます。一見単純なこの機能を実現する別の方法は、-nオプションを使うか、次のコード片に頼ることだけなので、このコマンドは役立ちます。前者はスクリプトを不必要に複雑にすることがあり、後者は見える効果が何もないままファイル全体を読み込むため、時間を浪費します。
:eat $d 最終行で、出力せずに終了する N 別の行を、表示せずに読み込む g メモリーを節約するため、毎回パターンスペースを上書きする b eat
-
R filename filenameの1行を読み込み待ちのキューに入れ、現在のサイクルの最後、または次の入力行を読み込むときに、出力ストリームへ挿入します。filenameを読めない場合や末尾に達した場合は、行を追加せず、エラーも通知しないことに注意してください。
rコマンドと同様に、ファイル名として特殊な値/dev/stdinを指定でき、標準入力から1行を読み込みます。-
T label 最後の入力行の読み込み、または条件付き分岐の実行以降に、
sによる置換が成功していない場合だけlabelへ分岐します。labelは省略でき、その場合は次のサイクルを開始します。-
v version このコマンドは何も行いませんが、GNU
sed拡張がサポートされていない場合に、sedを失敗させます。他のsedはこのコマンドを実装していないためです。さらに、スクリプトが必要とするsedの版(4.0.5など)を指定できます。既定値は4.0です。このコマンドを最初に実装した版だからです。このコマンドは、環境変数
POSIXLY_CORRECTが設定されていても、すべてのGNU拡張を有効にします。-
W filename パターンスペースの最初の改行までの部分を、指定したファイル名へ書き込みます。
wコマンドで述べたファイルの扱いに関する説明は、すべてここにも当てはまります。-
z このコマンドはパターンスペースの内容を空にします。通常は「s/.*//」と同じですが、より効率的で、入力ストリームに不正なマルチバイト列があっても動作します。POSIXは、そのような列には「.」が一致しないことを定めています。このため、ほとんどのマルチバイトロケール(UTF-8ロケールを含みます)では、スクリプトの途中で
sedのバッファーを空にする移植可能な方法はありません。