A resposta mais simples é procurar o (s) delimitador (es):
sed "s/[^ \t]*testbot[^ \t]*/$X/g"
Isso depende da ganância do algoritmo de correspondência e permite um branco à direita com espaço ou tabulação como um delimitador.
Eu tenho um monte de máquinas virtuais que eu implantar uma e outra vez em um grande ambiente de teste automatizado. Cada VM, depois de implantada, grava seu nome de host em /etc/hosts
.
127.0.0.1 XXXX-testbot-XXX
Quando for implantado, quero substituir "xxxx-testbot-xxxx" por "yyyy-testbot-yyyy" .
De fato, dependendo da implantação, o nome do host pode ser DDDD-SSSS-EEE-testbot-XYXXY "
Estou procurando algo como encontrar palavra com "testbot" e substituir por novo valor
Eu tentei isso:
x="garn13-testbot-15"
sudo sed -i "s/\*\(testbot)*\).*/$x/g" /etc/hosts
Mas isso apenas substituiria a correspondência do próprio "testbot":
Before:
127.0.1.1 garn13-testbot-12
After:
127.0.1.1 garn13-garn13-testbot-15
A resposta mais simples é procurar o (s) delimitador (es):
sed "s/[^ \t]*testbot[^ \t]*/$X/g"
Isso depende da ganância do algoritmo de correspondência e permite um branco à direita com espaço ou tabulação como um delimitador.