Reemplazar una palabra completa según el patrón usando SED

Reemplazar una palabra completa según el patrón usando SED

Tengo un montón de máquinas virtuales que implemento una y otra vez en un gran entorno de prueba automatizado. Cada VM, después de implementarse, escribe su nombre de host en /etc/hosts.

127.0.0.1     XXXX-testbot-XXX

Cuando se implemente, quiero reemplazar"xxxx-testbot-xxxx"con"aaaa-testbot-aaaa".

De hecho, dependiendo de la implementación, el nombre de host puede incluso serDDDD-SSSS-EEE-testbot-XYXXY"

Estoy buscando algo como encontrar una palabra con "testbot" y reemplazarla con un nuevo valor.

Probé esto:

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

Pero esto simplemente reemplazaría la coincidencia del propio "testbot":

Before:
127.0.1.1       garn13-testbot-12

After:
127.0.1.1       garn13-garn13-testbot-15

Respuesta1

La respuesta más sencilla es buscar los delimitadores:

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

Esto se basa en la avidez del algoritmo de coincidencia y permite un final blanco con espacio o tabulación como delimitador.

información relacionada