sed
はstream editorの略で入力テキストをフィルタリング・テキスト変換するツールです。いろいろ複雑なこともできますが、ここではsed
を使った簡単な文字列置換を紹介してみようと思います。
基本的な使い方
基本的な使い方は次のような感じです。
$ echo "input" | sed "s/pattern/replacement/"
"input"
で入力した文字列のうちpattern
に該当する部分がreplacement
に置き換えられて表示されます。
テキストファイルの文字列を置換したい場合は次のような感じで使います。
$ sed "s/pattern/replacement/" input.txt
※結果を保存したい場合は> output.txt
でリダイレクトしてください。
簡単な置換のサンプル
簡単な置換の例として、一番先頭にある小文字のtを大文字のTに置き換えてみます。
$ echo "stream editor for filtering and transforming text" | sed 's/t/T/'
sTream editor for filtering and transforming text
tは複数ありますが、何も指定しない場合は一番最初にマッチした部分のみが置き換えられます。今回の場合はstreamのtが該当します。
すべてのtを大文字に置き換えたい場合は"s/pattern/replacement/g"
のようにg
を追加してください。
$ echo "stream editor for filtering and transforming text" | sed 's/t/T/g'
sTream ediTor for filTering and Transforming TexT
正規表現を使った置換のサンプル
正規表現の詳細は省略しますがsed
でも正規表現を使った置換ができます。
簡単な例として、スペース後のワードを-
で分割して表示してみたいと思います。
$ echo "stream editor for filtering and transforming text" | sed -r "s/ (.)([^ ]*)/ \1-\2/g"
stream e-ditor f-or f-iltering a-nd t-ransforming t-ext
ポイントとしては\n
(n
は1から9の数字)を使って()
でグループ化したn番目の文字列を参照できるという点です。
ちなみに、マッチした文字列全体を参照したい場合は&
が使えます。
$ echo "stream editor for filtering and transforming text" | sed -r "s/ (.)([^ ]*)/ \1-&/g"
stream e- editor f- for f- filtering a- and t- transforming t- text