Substitua uma palavra inteira com base no padrão usando SED

Substitua uma palavra inteira com base no padrão usando SED

Tenho várias máquinas virtuais que implanto continuamente 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"com"aaaa-testbot-aaaa".

Na verdade, dependendo da implantação, o nome do host pode até serDDDD-SSSS-EEE-testbot-XYXXY"

Estou procurando algo como encontrar a palavra "testbot" e substituí-la por um 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

Responder1

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 delimitador.

informação relacionada