Вы можете сделать это с помощью одного вызова sed
:
sed -E 'H;g;:t;s/(.*)(\n)(.*)(\.)(.*)/\1\4\5\2\3/;tt;s/\.(.*)\n/\1./'
здесь используется буфер удержания, чтобы получить начальную новую строку в пространстве шаблонов и использовать ее для перестановок, пока за новой строкой не перестанет следовать какая-либо точка, в этот момент он удаляет начальную точку из пространства шаблона и заменяет новую строку точкой.
С BRE и немного другим регулярным выражением:
sed 'H
g
:t
s/\(.*\)\(\n\)\(.*\)\(\.\)\(.*\)/\1\4\5\2\3/
tt
s/\(\.\)\(.*\)\n/\2\1/'
Если ввод состоит из более чем одной строки и вы хотите изменить порядок в каждой строке:
sed -E 'G;:t;s/(.*)(\.)(.*)(\n)(.*)/\1\4\5\2\3/;tt;s/(.*)\n(\.)(.*)/\3\2\1/'