Bash でテキストファイルを結合する際に空行などを間に挿入する

Bash 環境でテキストファイルを結合するには、cat コマンドを使うのが簡単。しかし、ファイルとファイルの間に空行を追加したいとか、区切り線を入れたいとかいう要件があったので、やり方を調べた。

まずはサンプルファイル。

# File 1

File 1.
# 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 なので止めようね。