Perl, 64 63 bytes
62b code + 1 command line (-p)
Not amazing at the moment, but I'll continue to try to shorten it.
s/(\d+)x.(\d+)/$1*$2."x^".($2-1)/eg;s/\^1\b|^\d+ . |x(?!\^)//g
Usage example:
echo "1 + 2x + 3x^2" | perl -pe 's/(\d+)x.(\d+)/$1*$2."x^".($2-1)/eg;s/\^1\b|^\d+ . |x(?!\^)//g'
Thanks Denis for -1b