このページの内容

6.1 sedの動作

sedは2つのデータバッファーを管理します。処理に使うパターンスペースと、補助的なホールドスペースです。最初はどちらも空です。

sedは、入力の各行に対して次のサイクルを実行します。まず、sedは入力ストリームから1行を読み、末尾に改行があれば取り除き、パターンスペースに格納します。続いてコマンドを実行します。各コマンドにはアドレスを関連付けることができます。アドレスは一種の条件で、コマンドを実行する直前にその条件が成立する場合だけ、コマンドを実行します。

スクリプトの末尾に達すると、-nオプションを使っていない限り、パターンスペースの内容を出力ストリームへ表示し、末尾の改行を取り除いていた場合は付け直します。8その後、次の入力行に対する次のサイクルを開始します。

特別なコマンド(「D」など)を使わない限り、サイクルとサイクルの間でパターンスペースは消去されます。一方、ホールドスペースはサイクルをまたいでデータを保持します(両バッファー間でデータを移動するコマンド「h」「H」「x」「g」「G」を参照してください)。


(8)

実際には、sedが終端の改行なしで行を表示した場合でも、その同じ出力ストリームへさらにテキストを送ると、欠けている改行をその時点で表示します。この動作は「予期しない驚きをできるだけ小さくする」ものですが、「sed -n p」のようなコマンドの動作をcatと完全に同一にするわけではありません。