Bash でテキストファイルを結合する際に空行などを間に挿入する
Bash 環境でテキストファイルを結合するには、cat
コマンドを使うのが簡単。しかし、ファイルとファイルの間に空行を追加したいとか、区切り線を入れたいとかいう要件があったので、やり方を調べた。
まずはサンプルファイル。
file-1.md
# File 1
File 1.
file-2.md
# File 2
File 2.
コレをそのまま結合すると、次のような結果になる。
$ cat file-1.md file-2.md
# File 1
File 1.
# File 2
File 2.
File 1.
と # File 2
の間に空行を入れたい。そんな時はこうする。
$ cat file-1.md <(echo) file-2.md
# File 1
File 1.
# File 2
File 2.
もし区切り線を入力したいとか、任意の文字列を間に挿入したいといった場合は、echo
部分でうまく書いてやれば良い。
$ cat file-1.md <(echo -e '\n-----\n') file-2.md
# File 1
File 1.
-----
# File 2
File 2.
簡単でいいね。
もし、元のテキストファイルの末尾に改行が正しく挿入されていないと、普通に cat
したときに次のようになる。
# file-1.md の末尾に改行がない
$ cat file-1.md file-2.md
# File 1
File 1.# File 2
File 2.
そんな時は、次の sed
コマンドを流しておくと、ファイルの末尾に改行を追加できる。既に改行が挿入されているファイルに対してはそのままで、何個も余計に改行コードが追加されることはない。
$ sed -i -e '$a\' file-1.md
テキストファイルの末尾に改行がないのは POSIX 的に NG なので止めようね。