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/ //'