Linux 在sed替换中使用$HOSTNAME

Linux 在sed替换中使用$HOSTNAME,linux,bash,unix,sed,hostname,Linux,Bash,Unix,Sed,Hostname,我想在调用sed时使用Centos VM的$HOSTNAME,如下所示: sed -i 's/Apache 2 Test Page/$HOSTNAME Test Page/g' /var/www/error/noindex.html 但这只是用$HOSTNAME测试页面替换了apache2测试页面。。。我知道我可以手动操作,但我有一个很好的理由希望这样做 FWIW,我实际上是在一个bash脚本中完成这项工作的,该脚本从一个Vagrantfile调用,该文件反过来提供多个VM(每个VM都安装了

我想在调用
sed
时使用Centos VM的$HOSTNAME,如下所示:

sed -i 's/Apache 2 Test Page/$HOSTNAME Test Page/g' /var/www/error/noindex.html
但这只是用
$HOSTNAME测试页面
替换了
apache2测试页面
。。。我知道我可以手动操作,但我有一个很好的理由希望这样做



FWIW,我实际上是在一个bash脚本中完成这项工作的,该脚本从一个Vagrantfile调用,该文件反过来提供多个VM(每个VM都安装了Apache2),以便测试HAProxy的负载平衡功能。因此,我只想用一种简单的方法来区分我的3台web服务器,我认为修改默认的Apache页面是最简单的方法。

用双引号而不是单引号括住sed的
s//
,以进行变量扩展

sed -i "s/Apache 2 Test Page/$HOSTNAME Test Page/g" /var/www/error/noindex.html
例如:

$ echo 'foo Apache 2 Test Page bar' | sed "s/Apache 2 Test Page/$HOSTNAME Test Page/g"
foo avinash-Lenovo-IdeaPad-Z500 Test Page bar

将sed(
s///
)用双引号括起来,而不是用单引号来进行变量扩展。@AvinashRaj是的,在这里也可以。我更喜欢我发布的解决方案,因为这样我就不必担心在sed命令中转义shell字符了。(在本例中,这不是问题)