Поскольку вы просите sed
решение, я бы сделал это следующим образом:
sed -e '/^xyz$/!d;:a' -e '$!{N;ba' -e '};s/\(.*\nEnd\).*/\1/'
Итак, отбросьте все до первого шаблона (/^xyz$/!d
), затем выполните цикл, чтобы собрать все оставшиеся строки в пространстве шаблонов(:a;$!{N;ba
)и удалите все, что находится за последним вхождением второго шаблона(s/\(.*\nEnd\).*/\1/
).
Сбор в пространстве шаблонов необходим, поскольку адресация(/xyz/,/End/
)не является жадной, а .*
внутри пространства шаблонов является жадной.
Как сценарий оболочки
for ((i=1; i<5 ; i++))
do
printf '%d, %d, %d, ' $i $((i+5)) $((i+10))
done
echo
После 14 будет лишняя запятая, это можно исправить, если это имеет значение.