sed says basic POSIX regular expressions that do not include + as a metacharacter. In portable mode, rewrite to use * :
sed 's/\.\.*/_/'
or if all you ever need is Linux, you can use various GNU-isms:
sed -r 's/\.\.*/_/'
This last example answers your other question: a character that is literal when used can have special meaning when flipping back, and although % doesn't really matter when flipping back, which means that \% is safe.
Note: you do not need two separate sed commands.
echo $name | sed -e 's/\%20/_/' -e 's/\.+/_/'
(Also, you only need to do this once per line or for all occurrences? You may need the /g modifier.)
source share