sed + adiciona a última palavra em cada string somente se a palavra não aparecer

sed + adiciona a última palavra em cada string somente se a palavra não aparecer

Eu tenho o seguinte arquivo:

linuxA.mtt.corp
linux3V
linux4B
linux2A
linux5v.mtt.corp

como adicionar o .mtt.corpem cada string que não possui essa palavra?

Responder1

É bem simples com sed:

sed -e '/\.mtt\.corp$/!s/$/.mtt.corp/' <file

Isso ssubstitui o fim da linha por .mtt.corpcada linha que não termina com essa string.

Responder2

Uma solução Perl:

$ perl -lpe '$_ .= ".mtt.corp" if !/\.mtt\.corp$/' file
linuxA.mtt.corp
linux3V.mtt.corp
linux4B.mtt.corp
linux2A.mtt.corp
linux5v.mtt.corp

Faz -pimprimir perlcada linha do arquivo de entrada após aplicar o script fornecido por -ee -lremove novas linhas finais de cada linha de entrada e adiciona uma a cada printchamada. A $_variável é a linha atual. Portanto, isso será adicionado mtt.corpà linha se ainda não corresponder.

Uma solução estranha:

$ awk '!/\.mtt\.corp$/{$0=$0".mtt.corp"}1;' file
linuxA.mtt.corp
linux3V.mtt.corp
linux4B.mtt.corp
linux2A.mtt.corp
linux5v.mtt.corp

A mesma ideia. .mtt.corpé adicionado a quaisquer linhas ( $0) que não terminem com ele e cada linha é impressa ( 1;).

informação relacionada