Это может сработать для вас (GNU sed):
sed -r '1{x;s/^/1/;x};N;/\n<marker>/!{P;D};N;G;s/.*(\n.*\n).*\n(.*)/<name>test\2<\/name>\1<name>test\2<\/name>/;x;s/.*/expr & + 1/e;x' file
В начале файла заполняется счетчик 1. Счетчик удерживается в области удержания и увеличивается после каждой замены.
Создайте окно из двух строк по всей длине файла.Если вторая строка в окне не начинается <marker>
, выведите первую строку, а затем удалите ее и повторите.В противном случае добавьте третью строку, а затем добавьте счетчик из области удержания.Используя сопоставление с образцом, замените первую и третью строки требуемым тестом.
Наконец увеличьте счетчик, готовый к следующему совпадению, и выведите последние три строки, которые были изменены.