Remplacer un mot entier basé sur le motif en utilisant SED

0

J'ai un groupe de machines virtuelles que je déploie encore et encore dans un grand environnement de test automatisé. Après son déploiement, chaque machine virtuelle écrit son nom d’hôte sur /etc/hosts.

127.0.0.1     XXXX-testbot-XXX

Quand il sera déployé, je veux remplacer "xxxx-testbot-xxxx" avec "aaaa-testbot-aaaa" .

En fait, en fonction du déploiement, le nom d’hôte peut même être DDDD-SSSS-EEE-testbot-XYXXY "

Je cherche quelque chose comme trouver mot avec "testbot" et remplacer par une nouvelle valeur

J'ai essayé ceci:

x="garn13-testbot-15"
sudo sed -i "s/\*\(testbot)*\).*/$x/g" /etc/hosts

Mais cela ne ferait que remplacer la correspondance de "testbot" elle-même:

Before:
127.0.1.1       garn13-testbot-12

After:
127.0.1.1       garn13-garn13-testbot-15
user2066671
la source

Réponses:

0

La réponse la plus simple consiste à rechercher le (s) délimiteur (s):

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

Cela repose sur la gourmandise de l'algorithme de correspondance et permet d'utiliser un blanc de fin avec un espace ou une tabulation comme séparateur.

AFH
la source