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


3.5 sコマンド

(置換での)sコマンドの構文は, `s/regexp/replacement/flags'です./文字は, 他の単一文字をsコマンドで与えることで一様に置換してもかまいませ ん./文字(または,それの代わりの使用されているその他の文字)は, \文字を前置した場合だけregexpreplacementに書くこと が可能です.

sコマンドは,おそらくsedで最も重要で,様々なオプション が多くあります.基本的な概念は単純です.sコマンドは,提供されて いるregexpに対しパターン空間のマッチを試みます.マッチが成功する 場合.マッチしたパターン空間の位置がreplacementで置換されます.

replacement\n(nは1から9までの数字で,1と9も 含まれます)での参照を含めることが可能で,それはn番目の\(と そのマッチと\)に含まれているマッチの位置を参照します.また, replacementに,パターン空間のマッチ位置全体を参照する,エスケープ されていない&文字を含めることも可能です.

最後に(これはGNU sedの拡張です),特別なバックスラッシュのシーケン スと文字LlUu,またはEの一つを 含めることが可能です.それぞれの意味は以下のとおりです.

\L
\U\Eが見つかるまで小文字に置換します.
\l
次の文字を小文字に置換します.
\U
\L\Eが見つかるまで大文字に置換します.
\u
次の文字を大文字に置換します.
\E
\L\Uで開始した大文字小文字の変換を停止します.

\&,または改行そのものを最終的な置換物に含めるため, replacement内の\&,または改行に必要な\を確 実に前置してください.

sコマンドにはゼロ以上の下記のflagsを続けることが可能です.

g
最初のものだけでなくすべてのregexpへのマッチを置換します.
number
regexpnumber番目のマッチのみ置換します.

注意:posixの標準は,gnumber指示語を混ぜたときに生 じることを指定しておらず,現在はsedの実装上で幅広い同意はあり ません.GNU sedでは,相互作用を以下のように定義しています. number番目までのマッチを無視し,number番目からマッチしした すべてのマッチを置換します.

p
置換が行なわれた場合,新しいパターン空間を出力します.

注意:peオプションの両方が指定されているとき,二つの順 序に関連して,全く異なる結果を生成します.一般的に,ep(評価して 出力)では期待したものになるでしょうが,もう一方の順番はデバッグで役に立 つものになります.この理由は,現在のバージョンのGNU sedが, e前後のpオプションの存在を特別なものとして解釈しますが, sコマンドに対する一般的なフラグはその効果を一度だけ表示するため です.この動作は,ドキュメントには書かれていますが,将来のバージョンで は変更するかもしれません.

w file-name
置換が行なわれた場合,結果を指名されたファイルに書き出します. GNU sedの拡張として,file-nameの特殊な値をサポートします.結 果を標準エラー出力に書き出す/dev/stderr,そして標準出力に書き出 す/dev/stdoutです.1
e
このコマンドで,シェルコマンドからの入力をパターン空間へのパイプで渡す ことが可能になります.代入が行なわれた場合,パターン空間で見つかったコ マンドが実行され,パターン空間はその出力で置換されます.後置される改行 は抑制されます.実行されたコマンドにnul文字が含まれる場合,結果は 定義されていません.これはGNU sedの拡張です.
I
i
正規表現にマッチさせるI指示語はGNUの拡張で,大文字小文 字を無視する方法で,sedregexpにマッチさせます.
M
m
正規表現のマッチに対するM指示語は,GNU sedの拡張で, ^$を(通常の動作に加え),それぞれ改行後の空の文字列と改 行前の空の文字列にマッチさせます.特殊な文字の並びがあります.

(\`\') これらは常にバッファの最初または最後にマッチします.Mmulti-lineを意味します.


脚注

[1] これは,-iスイッチが使用され ていない限り,pと等価です.