昨日、bashのprintfの話をしました。printfは、以前に簡単なテンプレート処理をする目的で紹介したのでした →「このシェル・ワンライナーがけっこう役立った: printfコマンドで超簡易テンプレート」
なんかプレースホルダーのマークがあって、プレースホルダー部分を実際の文字列で置換するのがテンプレート処理の基本です。
printf "%s,\n%s.\n" Hello World
これも、%sで示されるプレースホルダーがあって、実際の文字列「Hello」と「World」で置き換えているので、まー「テンプレート処理」と言えなくもないでしょう。
実際の文字を変数にセットして、ドルマークの変数参照で置換する方法もあります。
greeting=Hello whom=World; echo "$greeting,
$whom.
"
$greetingと$whomが文字列内の変数参照です。シェルの文字列は、改行をそのまま含んでもいいので三行になっています。
複数行のテキストを書くにはヒアドキュメントという方法もあります。
greeting=Hello whom=World; cat <<EOF
$greeting,
$whom.
EOF
sedを使って置換することもできます。プレースホルダーはバーセントで囲まれた名前としました。
echo "%greeting%,
%whom%.
"| sed -e 's/%greeting%/Hello/g' -e 's/%whom%/World/g'
これらの簡単な方法では機能的に不足するときは、Unix/Linuxならm4というマクロプロセッサがあります。地味な存在ですが、システムに必ず入っているし、意外と強力ですよ。
「m4はチョット…」というむきは、mustache(http://mustache.github.io/)というテンプレート言語だと色々なスクリプト言語による実装があるので、お好みの言語処理系で使えます。