Чтобы получить то, что вы хотите, попробуйте это:
sed -r 's/^([^.]*)\.(.*)/\1\n\2/'
Тест:
$ echo "string.with.dots" | sed -r 's/^([^.]*)\.(.*)/\1\n\2/'
string
with.dots
sed будет соответствовать жадности, поэтому, пока вы используете sed 's/\(.*\)\.\(.*\)/\1\n\2/', он будет жадно сочетаются с последним . в качестве первой захваченной группы, а затем остальные после . как второй.
В моем sed выражении, чтобы sed перестать быть жадным, у меня есть для поиска некоторых альтернатив. Я с самого начала сопоставил с . в качестве первой группы ([^.]*), а затем независимо от первого совпадения как второго.
Теперь, если вы хотите, чтобы все части вокруг . были раздельными строки:
$ echo "string.with.dots" | sed -r 's/^([^.]*)\.([^.]*)\.(.*)/\1\n\2\n\3/'
string
with
dots