GNU coreutils entendem UTF-8 em geral. Por exemplo, echo 哈哈 | wc -m corretamente gera 3 em uma localidade UTF-8 (observe que a opção é -m , não -c , o que, por razões históricas, significa bytes).
Este é um bug em cut . Olhando para a fonte de cut , cut em caracteres simplesmente não está implementado: a opção -c é tratada como sinônimo de -b .
Uma solução alternativa é usar o awk. O GNU awk lida bem com o UTF-8.
awk '{print substr($0,2,length)}'