我的开发环境设置要求我在/ 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的问题,但不确定
答案 0 :(得分:2)
您应该通过以下方式更改sed命令:
sed -i "s/$oldIP/$newIP/g" /etc/hosts
如果您使用简单的引号 “'” ,您的变量将不会被其值替换!
您还可以通过以下方式编辑第一个正则表达式:
\b(\d{1,3}\.){3}\d{1,3}\b
最后但并非最不重要的一点是,在使用就地模式的sed之前,您应该备份/etc/hosts
文件,以避免出现意外情况。
希望它有所帮助!