У меня есть следующий файл:
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
-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;
).