sed + добавить последнее слово для каждой строки, только если слово не отображается

У меня есть следующий файл:

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

как добавить .mtt.corp для каждой строки, которая не имеет этого слова?

Это довольно просто с sed :

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

Это делает конец строки с .mtt.corp на каждой строке, которая не заканчивается этой строкой.

Решение perl:

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

-p делает perl печатать каждую строку входного файла после применения сценария, заданного -e и -l удаляет завершающие символы новой строки из каждой строки ввода и добавляет один к каждому вызову print . Переменная $_ является текущей строкой. Таким образом, это добавит mtt.corp в строку, если она уже не совпадает с ней.

Решение awk:

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

Та же идея. .mtt.corp добавляется в любые строки ( $0 ), которые не заканчиваются им, и каждая строка печатается ( 1; ).