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