パターンスペースで処理


    入力1行ずつの処理

    sedコマンドはファイル入力や標準入力を1行ずつ処理している。そのため、巨大なファイルサイズでも余計に読み込んでメモリ不足になるという心配がない。

    基本的には検索・置換等も行単位なのではあるが、Nコマンドホールドスペースを活用するなどすれば、複数行にまたがった検索・置換等も可能。


    パターンスペースで処理

    sedコマンドの処理は、パターンスペースと呼ぶ「入力行の一時保存領域」を通して行われている。パターンスペースの処理の流れは重要であり、この理解を飛ばすと振る舞いが意味不明となって躓く。

    基本的には、パターンスペースで1行分の入力を処理するというのが一つのサイクルで、これを繰り返す。

    1. 1行分の入力がパターンスペースにコピー

      ファイルなど入力がどれほど巨大でも、1行分だけパターンスペースにコピー(上書き)される。

    2. そのパターンスペースにスクリプト適用

      そのパターンスペースに対してスクリプトが適用される。その結果、パターンスペースの内容が変化する場合もあれば、1と同じままの場合もある。複数のスクリプトなら順次適用され、パターンスペースが順次変化していくことにもなる。

    3. スクリプト末尾の段階のパターンスペース標準出力

      スクリプトの処理が最後まで終わった段階で、残っているパターンスペースの内容が標準出力へ。

    4. 次の行へ

      入力の次の行へ。次のサイクルをまた1からスタート。