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

0

Eu tenho várias máquinas virtuais que implanto várias vezes em um grande ambiente de teste automatizado. Cada VM, depois de implantada, grava seu nome de host /etc/hosts.

127.0.0.1     XXXX-testbot-XXX

Quando for implantado, desejo substituir "xxxx-testbot-xxxx" por "aaaa-testbot-aaaa" .

De fato, dependendo da implantação, o nome do host pode até 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 "testbot":

Before:
127.0.1.1       garn13-testbot-12

After:
127.0.1.1       garn13-garn13-testbot-15
user2066671
fonte

Respostas:

0

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

AFH
fonte