【问题标题】:Bash find and replace stringBash 查找和替换字符串
【发布时间】:2017-07-29 09:38:11
【问题描述】:

我正在编写一个自动更改 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 上。

【问题讨论】:

    标签: regex bash perl replace quoting


    【解决方案1】:

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

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

    【讨论】:

    • 非常感谢!这解决了我的问题。我不敢相信我犯了那个愚蠢的错误大声笑