ファイル末尾の空白行の削除

30分プログラム、その639。ファイル末尾の空白行の削除。
行末の空白行の次に、ファイル末尾の空白行って嫌ですよね。なんとなく。
というわけで、ファイル末尾の空白行を削除するスクリプトを書いてみました。ファイルをその場(in place)で書き換える機能はないので、forと組合せるなりinplaceコマンドを使うなりしてください。
あと、ホントはこれをEmacsLispで可視化・自動削除をやりたかったけどうまくできなかった。たぶん、blank-mode.elをちょこっとカスタマイズすればできる気がするんだけど・・・。

使い方

$ echo "a\nb\n\n\n\n" | sed 's/$/_/'
a_
b_
_
_
_
_
$ echo "a\nb\n\n\n\n" | gosh delete-tail-lines.scm | sed 's/$/_/'
a_
b_

ソースコード

#! /opt/local/bin/gosh
;; -*- mode:scheme; coding:utf-8 -*-
;;
;; delete-tail-lines.scm -
;;
;; Copyright(C) 2009 by mzp
;; Author: MIZUNO Hiroki / mzpppp at gmail dot com
;; http://howdyworld.org
;;
;; Timestamp: 2009/08/14 21:52:28
;;
;; This program is free software; you can redistribute it and/or
;; modify it under MIT Lincence.
;;

(use srfi-1)
(define (delete-tail-lines xs)
  (reverse
   (drop-while (cut string=? "" <>)
	       (reverse xs))))

(map print
     (delete-tail-lines
      (port->string-list (standard-input-port))))