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

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.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.