Один прием:
Все Ваши выбранные строки теперь предварительно ожидаются строкой, которую Вы ввели в режиме вставки.
С помощью ввода:
<abc>def<
<firstword>anotherword</firstword>
<ghi>klm<
Использовать:
sed 's/<\([^>]*\)>\(.*\)<$/<\1>\2<\/\1>/' input
Выход:
<abc>def</abc>
<firstword>anotherword</firstword>
<ghi>klm</ghi>
Строка sed влияет только на строки, заканчивающиеся на <
(из-за <$
) и ловит паттерны между первой парой <>
и между '><' и вставляет все обратно, дублируя первую пару в конце (плюс закрывающее '>')
Вот подход на perl, по сути такой же, как и у Антона sed
:
$ perl -pe 's/<(.+)>(.+)</<$1>$2<\/$1>/' file
<sss>ss</sss>