4.1 アドレスの概要

アドレスは、sed コマンドを実行する行を指定します。次のコマンドは、144行目だけで、最初に現れる「hello」を「world」に置き換えます。

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

アドレスを指定しなければ、コマンドはすべての行に対して実行されます。次のコマンドは、入力ファイルの全行を対象として「hello」を「world」に置き換えます。ただし、各行で最初に現れる「hello」だけを変更することに注意してください。対象行に現れるすべての箇所を変更するには、「g」修飾子を使います。

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

アドレスには正規表現を含めることができ、行番号ではなく内容に基づいて行を選べます。次のコマンドは、文字列「apple」を含む行だけで「hello」を「world」に置き換えます。

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

アドレス範囲は、コンマ(,)で区切った2つのアドレスで指定します。アドレスには数値、正規表現、またはその両方を使えます。次のコマンドは、4行目から17行目まで(両端を含む)だけで「hello」を「world」に置き換えます。

sed '4,17s/hello/world/' input.txt > output.txt

アドレス指定の末尾(コマンド文字の前)に ! 文字を付けると、一致の意味が反転します。つまり、アドレスまたはアドレス範囲の後に ! 文字を付けると、そのアドレスに一致しない行だけが選ばれます。次のコマンドは、文字列「apple」を含まない行だけで「hello」を「world」に置き換えます。

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

次のコマンドは、入力ファイルの1〜3行目と18行目から最終行までだけで(つまり4〜17行目を除いて)「hello」を「world」に置き換えます。

sed '4,17!s/hello/world/' input.txt > output.txt