sed を使用して、%XXX% 形式のファイル内のテンプレート文字列を、シェル スクリプト内の XXX という変数の値に置き換えようとしています。
例:以下は完全に機能します
sed "s/%user_home%/$user_home/gi"
したがってuser_home=fred
、次の場合、
NameVirtualHost *:80
<VirtualHost *:80>
ServerName %server_name%
ErrorLog /var/log/apache2/%user_home%_webapp_error.log
CustomLog /var/log/apache2/%user_home%_webapp.log common
DocumentRoot /home/%user_home%/web_app/public
</VirtualHost>
となり、
NameVirtualHost *:80
<VirtualHost *:80>
ServerName %server_name%
ErrorLog /var/log/apache2/fred_webapp_error.log
CustomLog /var/log/apache2/fred_webapp.log common
DocumentRoot /home/fred/web_app/public
</VirtualHost>
問題は、テンプレート文字列とその変数を事前に明示的に知らずに sed コマンドを実行したいことです。つまり、%XXX% を検索し、変数の実際の名前を気にせずに、それを $XXX の内容に置き換えます。
後方参照と関係があることは知っていますが、後方参照の内容を変数名として使用する方法がわかりません。
私は試した、
sed "s/%\([a-z_]\)%/$(\1)/gi"
しかし、$\1 という変数を探しているように見えるため、これは機能しませんでした。