sed命令不通过变量替换ip地址

时间:2017-11-10 07:37:16

标签: bash shell sed

我的开发环境设置要求我在/ etc / host文件中为localIP条目指定某个主机名。(原因是多个微服务和存储,即Cassandra和Redis绑定到主机名) 我创建了这个简单的bash脚本

newIP=`ip a | grep wlp5s0 | grep -oE "\b([0-9]{1,3}\.){3}[0-9]{1,3}\b" | head -1`
echo $newIP
oldIP=`ping -q -c 1 -t 1 dummy | grep PING | sed -e "s/).*//" | sed -e "s/.*(//"`
echo $oldIP
sed -i 's/$oldIP/$newIP/g' /etc/hosts

通过这是打印正确的IP但更换没有发生 ,看起来像sed的问题,但不确定

1 个答案:

答案 0 :(得分:2)

您应该通过以下方式更改sed命令:

sed -i "s/$oldIP/$newIP/g" /etc/hosts

如果您使用简单的引号 “'” ,您的变量将不会被其值替换!

您还可以通过以下方式编辑第一个正则表达式:

\b(\d{1,3}\.){3}\d{1,3}\b

最后但并非最不重要的一点是,在使用就地模式的sed之前,您应该备份/etc/hosts文件,以避免出现意外情况。

希望它有所帮助!