sed + agrega la última palabra en cada cadena solo si la palabra no aparece

sed + agrega la última palabra en cada cadena solo si la palabra no aparece

Tengo el siguiente archivo:

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

¿Cómo agregar el .mtt.corpen cada cadena que no tiene esta palabra?

Respuesta1

Es bastante simple con sed:

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

Eso ssustituye el final de la línea con .mtt.corpen cada línea que no termina con esa cadena.

Respuesta2

Una solución Perl:

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

Hace -pque perlse imprima cada línea del archivo de entrada después de aplicar el script proporcionado por -ey -lelimina las nuevas líneas finales de cada línea de entrada y agrega una a cada printllamada. La $_variable es la línea actual. Entonces esto se agregará mtt.corpa la línea si aún no coincide.

Una solución extraña:

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

La misma idea. .mtt.corpse agrega a cualquier línea ( $0) que no termine con ella y cada línea se imprime ( 1;).

información relacionada