The first problem is that \d doesn't do what you think. Use [0-9] at least.
You still get host =host out, which seems crazy to me.
EDIT:
Okay
echo "host = 1234" | sed 's/#*\host[ \t]*=[ \t]*\([0-9]*\)/host = asdf/g'
- Why capture 'host' if it's always the same? Just rewrite it.
- Why preserve the exact tab/space information? Just rewrite it.
- Why escape things which are not special?
I hope you get the idea.
But here's what you probably want:
sed '/^#/!s/[ \t]*\([^ \t]*\)[ \t]*=[ \t]*\([^ \t]*\)/\1 = newvalue/g' input_file
This will change anything = anything to anything = newvalue in non-commented lines of input_file. To make it a specific key which is replaced by newvalue, use:
sed '/^#/!s/[ \t]*\(host\)[ \t]*=[ \t]*\([^ \t]*\)/\1 = newvalue/g' input_file
to e.g. replace only lines reading host = anything.