posix で、" eof の前に newline がなかったら newline を挿入" を実装するには?
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 である想定である模様です。