eof の前に改行コードがなかった場合に、改行を挿入するスクリプトを記述しようと思いました。(あまりにもそのようなテキストファイルを見かけるため)

How to add a newline to the end of a file?

によって、sed -e '$a\'のフィルタをかけることで、ひとまず手元の環境では期待通りに動作したのですが、これぐらいのよくある処理ならば、なるべく portable になるように、記述したいなと思いました。

質問:

  • posix の範囲内で、 "eof の前に改行コードがなかった場合に改行を挿入するスクリプト"を記述できますか?
  • できる場合、それはどのようなスクリプトになりますか?

調べたこと:

  • POSIX.1-2008 の sed は、 a\のコマンドをサポートしている様子でした。
  • しかし、同じページの sed の説明の最初にあるように、 sed はそもそも text file しか想定していない様子です。

The sed utility is a stream editor that shall read one or more text files

  • POSIX.1-2008, Definitions の 3.397 Text File や 3.206 Line を見ていると、 text file = line の sequence であり、 line の最後は必ず newline である想定である模様です。