У меня есть куча виртуальных машин, которые я развертываю снова и снова в большой автоматизированной тестовой среде. Каждая виртуальная машина после развертывания записывает свое имя хоста в /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

Но это просто заменит совпадение самого «тест-бота»:

Before:
127.0.1.1       garn13-testbot-12

After:
127.0.1.1       garn13-garn13-testbot-15

1 ответ1

0

Самый простой ответ - найти разделитель (и):

sed "s/[^ \t]*testbot[^ \t]*/$X/g"

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .