使用 SED 根据模式替换整个单词

使用 SED 根据模式替换整个单词

我在一个大型自动化测试环境中反复部署了一堆虚拟机。每个虚拟机在部署后都会将其主机名写入/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"

这依赖于匹配算法的贪婪性,并允许使用空格或制表符作为分隔符的尾随白色。

相关内容