O problema está citando.
Como você não cita seu comando sed , o parêntese \(...\) foi interpretado pelo shell antes de passar para sed .
Então, sed os tratou como parênteses literais em vez de parênteses com escape, sem referência anterior afetada.
Você precisa:
echo "312.2 MB" | sed 's/\([0-9]\)[[:space:]]\([GMK]\)//g'
para tornar a referência anterior afetada e obter o que você deseja.
Ou mais simplesmente:
echo "312.2 MB" | sed 's/ //'