テキストの置換

スポンサーリンク

テキストの置換(文字列の置換)はsedコマンドでよく使う機能になります。
テキストの置換はsコマンドを使います。sコマンドのsはsubstituteを意味します。

sコマンドは

で利用できます。

機能は正規表現にマッチングした文字列を置換したい文字列に置換します。
flagでどの程度置き換えるか等を制御できます。例えば、flagがない場合は最初に一致した文字列を置換します。

スポンサーリンク

フラグ

フラグ説明
gマッチングしたすべての文字列を置換
<number>n番目にマッチングしたすべての文字列を置換
p置換時にパターンスペースを表示
w <wfile>置換時に結果をwfileに書き込み
e(GNU拡張)置換時にその置換文字列をコマンドとして実行しその結果に置換
iまたはI(GNU拡張)regexpを大文字小文字の区別しない
mまたはM(GNU拡張)複数行モード

gや<number>のフラグを用いるとマッチングしたすべての文字列を置換したり、マッチングしたn番目の文字列を置換できます。

POSIX仕様ではgと<number>を同時に使用した場合の動作を規定していませんが、GNU仕様ではn番目以前の文字列を無視し、その後の文字列はすべて置換します。

置換結果をファイルに書き込み

wフラグは置換した結果をファイルに書き込むことができます。

このフラグのGNU拡張として/dev/stdoutと/dev/stderrの特別なファイル名が利用できます。

eフラグ

GNU拡張のeフラグは置換時にその置換文字列をコマンドとして実行し、その結果に置換します。
簡単な例として以下のようなコマンドが考えられます。

他にも、memo.txtを作成し、

memo.txt

のようにスクリプトを埋め込むみたいにして、sedコマンドで変換するような用途が考えられます。

ただし、eフラグの利用の際は意図しないコマンドが実行されないように注意が必要でしょう。