sedを使用して、%XXX%形式のファイルのテンプレート文字列をシェルスクリプトのXXXという変数の値に置き換えようとしています。sedを使ってファイル内の文字列をその名前の変数の内容に置き換えます
以下の作品は完全
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>
は、問題は、私は明示的にテンプレートの文字列を知らなくても、sedのコマンドを実行したいということです、
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>
になった場合とその変数が前面に表示されます。つまり、変数の実際の名前が何であるかを気にせずに、%XXX%を探して、$ XXXの内容で置き換えます。
バックリファレンスと何か関係がありますが、バックリファレンスの内容を変数名として使用する方法を理解できません。
私は
、
sed "s/%\([a-z_]\)%/$(\1)/gi"
を試みたが、それは$ \ 1という変数を探しているように見えるので、これは動作しませんでした。
バッククォートが動作しません、問題なく変更することができました。変数は 'sed'に引数を送る前にシェルによって展開されます。 – Barmar
これにはPerlが適しています。 '$ variable 'を'% 'の間の文字列に設定した後、' $ ENV {$ variable} 'を使って環境変数を取得できます。 – Barmar