次: , 前: Programming Commands, 上: sed Programs


3.8 GNU sed特有のコマンド

以下のコマンドはGNU sed特有なので,注意して使用する必要があり,移 植性の邪魔が問題ないことが分かっているときだけ使用してください.それで GNU sedの拡張を調査したり,標準的なsedではまだサポートさ れていないが,よく要求される作業を行なうことが可能になります.

e [command]
このコマンドで,シェルコマンドからの入力をパターン空間へパイプで渡すこ とが可能になります.パラメータを用いていない場合,eコマンドはパ ターン空間で見つかったコマンドを実行し,パターン空間を出力で置換します. 後置される改行は抑制されます.

パラメータが指定されている場合は,代わりにeコマンドがそれをコマ ンドとして解釈し,(rが行なうように)それを出力ストリームに送りま す.そのコマンドは,最後の終りがバックスラッシュでない限り,複数の行を 跨って実行することが可能です.

いずれの場合でも,実行されたコマンドにnul文字が含まれる場合,結果 は定義されていません.

L n
このGNU sedの拡張は,fmtが行なうように,(最大)n文字の 行の出力を生成するため,パターン空間の行を補充しつなげます.nが省 略されている場合,コマンドラインで指定されているデフォルトを使用します. このコマンドの試みは失敗だと思っていて,要求が無ければ(きっと無いでしょ うけど)将来のバージョンでは削除する予定です.
Q [exit-code]
このコマンドは,単一のアドレスだけを受け入れます.

このコマンドはqと同じですが,パターン空間の内容を出力しません. qに似ていて,呼び出し側に終了コードを返す能力を提供しています.

この一見些細な機能を達成する唯一の別の方法は,-nオプションを使用 する方法(スクリプトが不必要に複雑になります)や,見た目に影響しないよう にファイル全体を読み込むと時間が無駄になるような以下の断片を利用する方 法なので,役に立つはずです.

          :eat
          $d       Quit silently on the last line
          N        Read another line, silently
          g        Overwrite pattern space each time to save memory
          b eat
     

R filename
filenameの行を読み込み,現在のサイクルの終りや次の入力行が読み込 まれたときに出力ストリームに挿入するためキューに保存します. filenameが読み込み不可能,またはファイルの終りに達した場合,エラー を示すことなく,行が追加されないことに注意してください.

rコマンド同様,特殊な値/dev/stdinがファイル名としてサポー トされていて,それは標準入力の内容を読み込みます.

T label
前回の入力行の読み込みや条件分岐が行なわれてから,sの置換で成功 しなかったものがある場合だけlabelに分岐します.labelは省略 可能で,その場合は次のサイクルが開始されます.
v version
このコマンドは何もしませんが,GNU sedの拡張がサポートされていない 場合はsedは異常終了し,それはその他のsedの実装では それを実装していないためです.さらに,4.0.5の様に,スクリプトが 要求するsedのバージョンを指定することもかのうです.デフォルト は4.0で,それは,このコマンドが実装された最初のバージョンだから です.

このコマンドは,POSIXLY_CORRECTが環境変数で設定されている場合でも, すべてのGNU extensionsを利用可能にします.

W filename
最初の改行までのパターン空間の位置を,与えられたfilenameに書き出 します.ここでのファイル処理はwコマンドですべて述べています.