我正在尝试使用 sed 将 %XXX% 形式的文件中的模板字符串替换为我的 shell 脚本中名为 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 的变量。