sedは二つのデータバッファを管理しています.アクティブな パターン空間と補助的なホールド空間です.両方とも最初は空 です.
sedは,入力行単位で以下のサイクルを実行することで処理を実行し ます.最初にsedは入力ストリームから一行読み込み,くっついてい る改行を削除し,そしてそれをパターン空間に配置します.そして,コマンド が実行されます.それぞれのコマンドには実行するものに関連付けされたアド レスがあります.アドレスとは条件コードの一種で,コマンドが実行される前 に条件が合致している場合のみコマンドは実行されます.
スクリプトが終わると,-nオプションが使用されていないかぎり,パ ターン空間の内容が出力ストリームに出力され,削除されないかぎり改行が最 後に追加されます.1そして,次のサイクルでは次の入力行から開始します.
(‘D’のような)特殊コマンドが使用されていないかぎり,パターン空間は 二つのサイクルの間に削除されます.一方,ホールド空間はサイクル間でデー タを保持します(両方のバッファ間でデータを移動するコマンド‘h’, ‘H’,‘x’,‘g’,‘G’を参照してください).
[1] 実際,sedは最後に改行を付けずに行 を出力する場合,それ以降のテキストが同じ出力ストリームに送られるとすぐ に足りない改行を出力するので,catとまったく同じ‘sed -n p’のようなコマンドではそうならないので,“予想外の驚き”になることでしょ う.