sed は stream editor の略です。
awk と同じくストリーム指向で、テキストファイルを1行ずつ読み込み、様々な加工を施した結果を標準出力へ書き出します。
例えば、下記のコマンドは、ファイル内のテキスト AAA
を BBB
に置換して出力します。
一番よく使用するコマンドである、置換コマンド s
を使用しています。
$ sed 's/AAA/BBB/g' input.txt
sed は、ファイルからの入力だけでなく、パイプラインで渡された標準入力を処理することもできるので、下記のようにしても同様の結果を得られます。
$ cat input.txt | sed 's/AAA/BBB/g'
ファイル内のテキストを一括置換するなんてことは、今時のテキストエディタなら簡単にできますが、sed
コマンドはスクリプトから手軽に利用できるので、定型のテキスト処理を自動化したい場合にはまだまだ便利に使えます。
また、複数の入力ファイルを指定することもできるので、複数のファイルに対して同様の置換処理を行いたい場合も、テキストエディタに付属した機能を呼び出すよりも手早く実行できるでしょう。
ちなみに、Vim エディタの中で使う置換コマンドにも、sed で使う命令と同じ構文が採用されています。
sed でサポートされている正規表現は、基本正規表現を少し拡張した程度のもので、Perl のように、最短一致を表す .*?
といった表現が使えないことに注意してください。
aaa, bbb, ccc
111, 222, 333
aaa, bbb, ccc
sed で1つの編集コマンドだけを実行する場合は、下記のように、編集コマンド、入力ファイルの順番で指定します。
$ sed 's/aaa/AAA/g' input.txt
AAA, bbb, ccc
111, 222, 333
AAA, bbb, ccc
標準入力から渡されたテキストを、1つの編集コマンドで処理するには下記のようにします。
$ ls | sed 's/^/-- /'
-- bin/
-- boot/
-- ...
sed で複数のコマンドを同時に指定するには、各コマンドをセミコロン (;
) で区切るか、各コマンドを -e
オプションの引数として指定します。
$ sed 's/aaa/AAA/g; s/bbb/BBB/g' input.txt
AAA, BBB, ccc
111, 222, 333
AAA, BBB, ccc
$ sed -e 's/aaa/AAA/g' -e 's/bbb/BBB/g' input.txt
AAA, BBB, ccc
111, 222, 333
AAA, BBB, ccc
sed の置換コマンドを記載したスクリプトファイルを用意しておくこともできます。
sed スクリプトファイルを使用するには、sed コマンドの -f
オプションでスクリプトファイルを指定します。
aaa bbb ccc aaa bbb ccc
ccc bbb aaa ccc bbb aaa
s/aaa/AAA/g
s/bbb/BBB/g
s/ccc/CCC/g
$ sed -f replase.sed input.txt
AAA BBB CCC AAA BBB CCC
CCC BBB AAA CCC BBB AAA