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

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

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

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

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

решение1

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

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

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

решение2

Решение на 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-lprint$_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;).

Связанный контент