substitute!

ex コマンドの華、s コマンドのテスト。
[addresses] s[/pattern/replacement/[options][count][flags]]

指定された範囲 addresses の各行について、正規表現 pattern にマッチする箇所を replacement で置換する。pattern を囲む区切り文字は / の代わりに \、|、改行、” 以外の非アルファベット文字を用いることができる。\ は区切り文字や \ そのものなどの特殊な文字をエスケープすることができる。

pattern、および replacement の直後の、コマンドラインの末尾となる区切り文字は、省略することができる。pattern と replacement が両方省略された場合、最後に実行された s コマンドが繰り返される。pattern が指定されないか空の場合、vi 全体で最後に使用された正規表現が用いられる。replacement が指定されないか空の場合、pattern にマッチする箇所は空文字列で置換される。replacement 全体が % である場合、最後に s コマンドで使用された置換パターンが用いられる。

replacement 内でのキャリッジリターン(ex モードでは \、open/vi モードでは ^V によるエスケープで入力)は、入力箇所で行を分割してバッファ内に改行を生成することを意味する。キャリッジリターン自体は無視される。

options が文字 g(global を意味する)を含んでいる場合、行内において pattern にマッチする範囲が互いに重ならない形式ですべて置換される。

options が文字 c(confirm を意味する)を含んでいる場合、確認モードになる。pattern にマッチした箇所が画面に現れる。vi はユーザーからの反応を待つ。肯定的な応答(y など)が入力されると置換が行われる。他の入力では行われない。

検索方向が未保存の場合、s コマンドはそれを「前方」にセットする。

s コマンドの亜種として & コマンドがある。& コマンドは
s/pattern/replacement/
として置き換えられる。このとき pattern および replacement は前回の s、&、~ コマンドで使われたものを用いる。

もうひとつの亜種として ~ コマンドがある。~ コマンドは
s/pattern/replacement/
として置き換えられる。このとき pattern は vi 全体で最後に使用された正規表現、replacement は前回の置換(&、~ を含む)で使われたものを用いる。

コマンド終了後、カーソル位置は、置換が行われなかった場合は変化しない。置換が行われた場合は、最後に置換が行われた行の、最初の非空白文字に置かれる。

replacement の書式 

文字 &(magic オプションがセットされていない場合は \&)は、pattern にマッチし置換されるべき文字列を示す。文字 ~(magic オプションがセットされていない場合は \~)は前回の s コマンドで使用された replacement を示す。\n(n は整数)は、pattern で指定される後方参照式に対応するものを示す。n は後方参照式の出現インデックスを示す。対応する後方参照式がない場合、\n は空文字で置き換えられる。

\l、\u、\L、\U は置換文字列内の要素(リテラル、&、\n)の大文字小文字を操作する。\l と \u は後続する 1 文字の大文字小文字を操作する。\L と \U は後続する文字列を \e または \E が現れるか、置換文字列の最後まで、大文字小文字を操作する。

この他の文字はその文字そのものとして扱われる。

……だそうです。

Leave a Reply

Your email address will not be published. Required fields are marked *