Это может сработать для вас (GNU sed):
sed 's/ss\|qq/\n&/;:a;s/\nss/qq\n/;s/\nqq/dd\n/;s/\n\(.\)/\1\n/;ta;s/\n//' file
Это вводит маркер в виде новой строки о том, где произошла последняя замена.В конце строки маркер удаляется.
Причина этого маркера заключается в том, что каждый вызов команды подстановки начинается заново с начала строки, а не с того места, где закончилась последняя подстановка.Флаг g
может запутать проблему, но относится только к текущему вызову подстановки.
Как уже упоминалось, лучший способ состоит в том, чтобы использовать альтернативу для первой замены и заменить ее глобально как последнююкоманда.
sed 's/ss/\n/g;s/qq/dd/g;s/\n/qq/g' file