Linux‎ > ‎

Linux - テンプレートファイルに別ファイルの内容を埋め込む


テンプレートファイルを用意しておき、別ファイルの内容をテンプレートファイル内の特定の場所に埋め込む方法です。別ファイルの内容に改行が含まれている場合の対処に少し工夫が必要だったのでメモっておきます。

(1)
TEMPLATE_FILE=template.txt
DATA_FILE=data.txt

# 改行文字を「\\n」という3文字の文字列に置換
# 最終行でなければループ、ループ内で次の行を読みこみ、記憶していた文字列に追加
# ∴全行読み込み一度に置換
TEXT=`sed ':loop; N; $! b loop; s/\n/\\\\n/g' ${DATA_FILE}`
# TEMPLATE_FILE中の【target】という文字列の個所をDATA_FILEの内容で置換
sed -re "s|【target】|${TEXT}|g" ${TEMPLATE_FILE}

もしくは
(2)
TEMPLATE_FILE=template.txt
DATA_FILE=data.txt

# 改行文字を「\\n」という3文字の文字列に置換
TEXT=`awk -F\n -v ORS='\\\\n' '{print}' ${DATA_FILE}`
# TEMPLATE_FILE中の【target】という文字列の個所をDATA_FILEの内容で置換
sed -re "s|【target】|${TEXT}|g" ${TEMPLATE_FILE}


template.txt
abc
def
【target】
ijk
【target】
opq
xyz

data.txt
123
456
789


(1)の実行結果
abc
def
123
456
789
ijk
123
456
789
opq
xyz
※(1)はdata.txtの末尾の改行の有無に関わらず、埋め込みテキストの末尾に改行がつかない。

(2)の実行結果
abc
def
123
456
789

ijk
123
456
789

opq
xyz
※(2)はdata.txtの末尾の改行の有無に関わらず、埋め込みテキストの末尾に改行がつく。


2011/10/04