使用 SED 根據模式替換整個單字

使用 SED 根據模式替換整個單字

我有一堆虛擬機,我在大型自動化測試環境中一遍又一遍地部署它們。每個虛擬機器在部署後都會將其主機名稱寫入/etc/hosts.

127.0.0.1     XXXX-testbot-XXX

當它部署後,我想更換“xxxx-testbot-xxxx”“yyyy-testbot-yyyy”

事實上,根據部署的不同,主機名稱甚至可以是DDDD-SSSS-EEE-testbot-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"

這依賴於匹配演算法的貪婪性,並允許尾隨白色以空格或製表符作為分隔符號。

相關內容