Regex Bash查找和替换字符串

Regex Bash查找和替换字符串,regex,bash,perl,replace,quoting,Regex,Bash,Perl,Replace,Quoting,我正在编写一个代码,将自动更改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)中的oldIP 然而,如果我尝试 sudo perl -pi -e 's/123.123.123.123/123.456.123.456

我正在编写一个代码,将自动更改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)中的oldIP

然而,如果我尝试

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何时会改变

我做错了什么?有什么解决办法吗?提前谢谢


如果有帮助的话,我在Ubuntu 16.04上。

您的变量不会在单引号之间展开。请改用双引号:

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

变量不会在单引号之间展开。请改用双引号:

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

非常感谢!这解决了我的问题。我真不敢相信我犯了那个愚蠢的错误,非常感谢!这解决了我的问题。我不敢相信我犯了那个愚蠢的错误哈哈