我在一个大型自动化测试环境中反复部署了一堆虚拟机。每个虚拟机在部署后都会将其主机名写入/etc/hosts
。
127.0.0.1 XXXX-testbot-XXX
当它部署后,我想替换“xxxx-测试机器人-xxxx”和“yyyy-testbot-yyyy”。
事实上,根据部署情况,主机名甚至可以是DDDD-SSSS-EEE-测试机器人-XYXXY”
我正在寻找一些内容,例如查找带有“testbot”的单词并将其替换为新值
我尝试了这个:
x="garn13-testbot-15"
sudo sed -i "s/\*\(testbot)*\).*/$x/g" /etc/hosts
但这只会取代“testbot”本身的匹配:
Before:
127.0.1.1 garn13-testbot-12
After:
127.0.1.1 garn13-garn13-testbot-15
答案1
最简单的答案是寻找分隔符:
sed "s/[^ \t]*testbot[^ \t]*/$X/g"
这依赖于匹配算法的贪婪性,并允许使用空格或制表符作为分隔符的尾随白色。