Next: , Previous: head, Up: Examples


4.13 最後の行を出力する

最初ではなく最後のn行出力することはより複雑ですが実現可能です. nは,文字を駄目にする前に二行目でエンコードされます.

このスクリプトは,最終的な出力をホールド空間に保持し,最後に出力する tacスクリプトに似ています.

     #!/usr/bin/sed -nf
     
     1! {; H; g; }
     1,10 !s/[^\n]*\n//
     $p
     h

そのスクリプトの中心では,10行のウィンドウを保持し,行を追加し最も古い 行を削除しながらスライドしていきます(二行目の置換コマンドはDコマ ンドのように動作しますがループを再開しません).

“スライドウィンドウ”のテクニックは,効率的で複雑なsedを書く 強力な方法で,それは,Pのようなコマンドを手動で実装する場合は多 くの作業が必要になるためです.

この章の残りで十分に説明している,NP,そしてDコ マンドを基本としているテクニックを導入するため,単純な`スライドウィンド ウ' を使用しているtailの実装を以下に上げます.

これは複雑に見えますが,実際最後のスクリプトと同じように動作します.し かし,適切な行数を捨てた後で,内部の行の場所を保持するためのホールドス ペースを使用するために停止し,パターン空間を一行スライドするために NDを代わりに使用しています.

     #!/usr/bin/sed -f
     
     1h
     2,10 {; H; g; }
     $q
     1,9d
     N
     D