Bash 查找并替换字符串

Bash find and replace string

我正在编写一个代码,可以自动更改 VestaCP 面板的 IP。 我需要用新变量$newIP替换变量$oldIP的代码,所以写了这段代码

sudo perl -pi -e 's/${oldIP}/${newIP}/g' /etc/nginx/conf.d/${oldIP}.conf

但代码不会替换来自 oldIP.conf (123.123.123.123.conf) 的旧 IP。

但是,如果我尝试

sudo perl -pi -e 's/123.123.123.123/123.456.123.456/g' /etc/nginx/conf.d/123.123.123.123.conf

虽然我不能使用这段代码,但它工作得很好,因为服务器有不同的 IP,当它改变时我无法预测下一个 IP。

我在这里做错了什么?任何解决方案?提前致谢!

P.S。如果有帮助,我在Ubuntu 16.04.

您的变量没有在单引号之间展开。改为使用双引号:

sudo perl -pi -e "s/${oldIP}/${newIP}/g" /etc/nginx/conf.d/${oldIP}.conf