Другим способом помощи расширения брекета вы можете сделать:
sed '-es/abc/xyz/'{8..6} '-es/abc/xyz/'{4..2} <<<"$str"
Обратите внимание, что диапазон всегда должен быть max первым в {max#..min#}, сначала должны указываться первые максимальные диапазоны .
Вы также можете указать, какой диапазон позиций следует заменить в формате {x,y,z}, где номера должны быть x>y>z:
sed '-es/abc/xyz/'{8,6,4,2} <<<"$str"
Обратите внимание, что если вы используете одинаковое число {x,x} это вызовет проблему и снова и снова заменит позицию x (для этого существует s/abc/xyz/X альтернатива, где X - номер позиции).
I узнал это из ответа Stéphane Chazelas на Unix.SE