このページの内容

2 sedの実行

この章ではsedの実行方法を説明します。sedスクリプトや個々のsedコマンドの詳細は、次の章で取り上げます。


2.1 概要

通常、sedは次のように起動します。

sed SCRIPT INPUTFILE...

たとえば、ファイルinput.txtにあるすべての「hello」を「world」に変更するには、次のようにします。

sed 's/hello/world/g' input.txt > output.txt

修飾子「g」(global)がなければ、sedは各行で最初に現れるものだけを変更します。

INPUTFILEを指定しない場合、またはINPUTFILEが-の場合、sedは標準入力の内容をフィルター処理します。次のコマンドは同じ働きをします。

sed 's/hello/world/g' input.txt > output.txt
sed 's/hello/world/g' < input.txt > output.txt
cat input.txt | sed 's/hello/world/g' - > output.txt

sedは出力を標準出力へ書き込みます。標準出力へ表示する代わりにファイルを直接編集するには、-iを使います。別のファイルへ出力を書き込むためのWコマンドとs///wコマンドも参照してください。次のコマンドはfile.txtを変更し、出力は生成しません。

sed -i 's/hello/world/' file.txt

既定では、sedは処理した入力をすべて表示します(dなどのコマンドで変更・削除された入力を除きます)。出力を抑制するには-nを使い、特定の行を表示するにはpコマンドを使います。次のコマンドは入力ファイルの45行目だけを表示します。

sed -n '45p' file.txt

sedは複数の入力ファイルを一つの長いストリームとして扱います。次の例は、最初のファイル(one.txt)の先頭行と、最後のファイル(three.txt)の最終行を表示します。この動作を切り替えるには-sを使います。

sed -n  '1p ; $p' one.txt two.txt three.txt

-eオプションも-fオプションもなければ、sedはオプションでない最初の引数をscriptとして、その後のオプションでない引数を入力ファイルとして扱います。-eまたは-fでscriptを指定すると、オプションでない引数はすべて入力ファイルとして扱われます。-eと-fは併用でき、複数回指定することもできます。その場合、最終的に実行されるscriptは、個々のscriptをすべて連結したものになります。

次の例は同じ働きをします。

sed 's/hello/world/' input.txt > output.txt

sed -e 's/hello/world/' input.txt > output.txt
sed --expression='s/hello/world/' input.txt > output.txt

echo 's/hello/world/' > myscript.sed
sed -f myscript.sed input.txt > output.txt
sed --file=myscript.sed input.txt > output.txt