私は、サーバーに関するデータを収集し、それを HTML 電子メール レポートにフォーマットするスクリプトに取り組んでいます。これまでは sed を使用して HTML テンプレートの値を置き換えてきましたが、ほとんど問題ありませんでした。しかし、変数に基づいて HTML の複数行ブロックを任意の回数挿入する必要がある状況に遭遇しました。sed は複数行をうまく処理できないようなので、これをどのように実行すればよいのかよくわかりません。おそらく、私が考えていなかった perl または awk を使用する方法があるのでしょう。
これは、ファイルの数に応じて、既存のテンプレートに0-n個のテーブルブロックを挿入する必要がある例です。
$files 内の f について
<tr class="details">
<td> f.$DATE </td>
<td> f.$APPLIANCE </td>
<td> f.$HOST </td>
<td> f.$MDL </td>
</tr>
等
ありがとう!
答え1
ヒアドキュメントを使用します:
for f in $files; do
cat <<END_HTML
<tr class="details">
<td> f.$DATE </td>
<td> f.$APPLIANCE </td>
<td> f.$HOST </td>
<td> f.$MDL </td>
</tr>
END_HTML
done
$files
これにより、名前付き変数がそれぞれの値に展開され、ブロックが 内の単語と同じ回数だけ出力されます。
答え2
「スニペット」を試すことができます。多くのテキスト エディターまたは IDE がこの機能をサポートしています。コーディング ブロックのテンプレートをカスタマイズして名前を付け、名前を入力してタブ キーを押すとコーディング ブロックに展開できます。さらに、タブ キーを押すとプレースホルダーを編集できます。