最初ではなく最後のn行出力することはより複雑ですが実現可能です. nは,文字を駄目にする前に二行目でエンコードされます.
このスクリプトは,最終的な出力をホールド空間に保持し,最後に出力する
tac
スクリプトに似ています.
#!/usr/bin/sed -nf 1! {; H; g; } 1,10 !s/[^\n]*\n// $p h
そのスクリプトの中心では,10行のウィンドウを保持し,行を追加し最も古い
行を削除しながらスライドしていきます(二行目の置換コマンドはD
コマ
ンドのように動作しますがループを再開しません).
“スライドウィンドウ”のテクニックは,効率的で複雑なsedを書く
強力な方法で,それは,P
のようなコマンドを手動で実装する場合は多
くの作業が必要になるためです.
この章の残りで十分に説明している,N
,P
,そしてD
コ
マンドを基本としているテクニックを導入するため,単純な`スライドウィンド
ウ' を使用しているtail
の実装を以下に上げます.
これは複雑に見えますが,実際最後のスクリプトと同じように動作します.し
かし,適切な行数を捨てた後で,内部の行の場所を保持するためのホールドス
ペースを使用するために停止し,パターン空間を一行スライドするために
N
とD
を代わりに使用しています.
#!/usr/bin/sed -f 1h 2,10 {; H; g; } $q 1,9d N D