3 sedスクリプト
3.1 sedスクリプトの概要
sedプログラムは一つ以上のsedコマンドから成り、-e、-f、--expression、--fileの一つ以上のオプションで渡します。これらのオプションを一つも使わない場合は、オプションでない最初の引数で渡します。この文書で「sedスクリプト」と言うときは、渡されたすべてのscriptとscript-fileを指定順に連結したものを指します。概要を参照してください。
sedコマンドは次の構文に従います。
[addr]X[options]
Xは1文字のsedコマンドです。[addr]は省略可能な行アドレスです。[addr]を指定すると、コマンドXは一致した行でだけ実行されます。[addr]には、単一の行番号、正規表現、行の範囲を指定できます(アドレス:行の選択を参照)。一部のsedコマンドでは、さらに[options]を使います。
次の例は入力の30〜35行目を削除します。30,35はアドレス範囲で、dは削除コマンドです。
sed '30,35d' input.txt > output.txt
次の例は、文字列「foo」で始まる行が見つかるまで入力をすべて表示します。そのような行が見つかると、sedは終了ステータス42で終了します。見つからず、ほかのエラーも起きなければ、sedはステータス0で終了します。/^foo/は正規表現アドレス、qは終了コマンド、42はコマンドのオプションです。
sed '/^foo/q42' input.txt > output.txt
scriptまたはscript-file内のコマンドは、セミコロン(;)または改行(ASCII 10)で区切れます。-eまたは-fオプションで複数のスクリプトを指定できます。
次の例はすべて同じ働きをします。二つのsed操作、すなわち正規表現/^foo/に一致する行の削除と、文字列「hello」のすべての出現箇所を「world」へ置き換える操作を行います。
sed '/^foo/d ; s/hello/world/g' input.txt > output.txt sed -e '/^foo/d' -e 's/hello/world/g' input.txt > output.txt echo '/^foo/d' > script.sed echo 's/hello/world/g' >> script.sed sed -f script.sed input.txt > output.txt echo 's/hello/world/g' > script2.sed sed -e '/^foo/d' -f script2.sed input.txt > output.txt
a、c、e、i、r、R、w、Wの各コマンドは、その構文上、後ろにコマンド区切りとして働くセミコロンを置けません。そのため、改行で終えるか、scriptまたはscript-fileの末尾に置いてください。また、コマンドの前には意味を持たない空白文字を任意に置けます。複数コマンドの構文を参照してください。