Заменить целое слово на основе шаблона с помощью SED

Заменить целое слово на основе шаблона с помощью SED

У меня есть куча виртуальных машин, которые я снова и снова развертываю в большой автоматизированной тестовой среде. Каждая виртуальная машина после развертывания записывает свое имя хоста в /etc/hosts.

127.0.0.1     XXXX-testbot-XXX

Когда он будет развернут, я хочу заменить"xxxx-тестбот-xxxx"с"yyyy-тестбот-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"

Это основано на жадности алгоритма сопоставления и допускает наличие завершающего пробела или табуляции в качестве разделителя.

Связанный контент