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