最終行が不完全のファイルをsedで置換すると最終行が無くなる
事の発端は、Oracleのバインド変数をシェルスクリプトで置換させてから
処理しようとしたとき。
cat 元のファイル | sed s/バインド変数/バインド変数の値/g > ${sql_file}
として、
sqlplus -s user/password@sid <${sql_output} set ... set ... @${sql_file} exit SQL
で実行したら、出力ファイルが空になった。。。あらっ、と思って調べると最後の一行が無くなって、";"で終っていなかったのが原因らしい。元のファイルを vi で開いてみたら、「最終行が不完全です」と警告が。。
なので、適当なファイルで実験。hoge.txtを、
$ cat hoge.txt aa aaa;$ (←"$"は次のコマンドプロンプト)
と作成して、viで開くと
$ vi hoge.txt aa aaa; ~ ~ "hoge.txt" [最終行が不完全] 2 行、8 バイト
と表示されるこのファイルをsedで置換すると
$ cat hoge.txt | sed s/a/b/g bb
となってしまって、復帰改行が入っていないと駄目らしい。
$ echo | cat hoge.txt - | sed s/a/b/g
とすれば、ちゃんとしたファイルの場合、余計な改行が入ってしまうけど今のところはこれで良いとする。