По умолчанию sed не может удалять символы новой строки, потому что он читает по одной строке, разделенной новой строкой, за раз.
С любым awk в любой оболочке на каждом блоке UNIX для любого количества строк, заканчивающихся на %
, последовательных или нет:
$ awk '{printf "%s%s", $0, (/%$/ ? "" : ORS)}' file
abcabcabcabc%123456789123
abcabcabcabc%123456789123
и с последовательными %
строками:
$ cat file
now is the%
winter of%
our%
discontent
$ awk '{printf "%s%s", $0, (/%$/ ? "" : ORS)}' file
now is the%winter of%our%discontent