Substitui uma palavra inteira baseada no padrão usando o SED

0

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
    
por user2066671 10.06.2018 / 20:50

1 resposta

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 tabulação como um delimitador.

    
por 10.06.2018 / 21:19

Tags