заменить на "." [точки], но оставьте последнюю: например: .txt [может быть случайное количество точек в строке, даже ноль, мне просто нужна последняя]
$ echo 'someth.ing.something.txt' | SOMEMAGIC someth-ing-something.txt
echo 'someth.ing.something.txt' | sed 's/\./-/g' | sed 's/-\([^-]*$\)/.\1/g'
$ echo 'toto.tata.titi.' | sed 's/\.\([^$]\)/-\1/g' toto-tata-titi.
в седе, с рекурсивными заменами:
sed ':a /\..*\./ {s/\./-/}; t a'
базовое имя one.two.three.txt .txt | sed -e 's / .// g' -e 's / $ /. txt /'