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