
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.