Cuando lo usé cuthoy, descubrí que no trata un carácter UTF-8 como un carácter, sino 3 caracteres porque tiene 3 bytes de longitud.
Esto parece ser generalmente cierto para muchas herramientas.
¿Hay versiones de los coreutilsque son conscientes de UTF-8?
Mi localesalida:
LANG=en_US.UTF-8
LC_CTYPE="en_US.UTF-8"
LC_NUMERIC="en_US.UTF-8"
LC_TIME="en_US.UTF-8"
LC_COLLATE="en_US.UTF-8"
LC_MONETARY="en_US.UTF-8"
LC_MESSAGES="en_US.UTF-8"
LC_PAPER="en_US.UTF-8"
LC_NAME="en_US.UTF-8"
LC_ADDRESS="en_US.UTF-8"
LC_TELEPHONE="en_US.UTF-8"
LC_MEASUREMENT="en_US.UTF-8"
LC_IDENTIFICATION="en_US.UTF-8"
LC_ALL=
Aquí es cuando cutno funciona
echo 哈哈 | cut -c 2-
��哈
La salida correcta debería ser
哈
si cut -cfunciona con caracteres multibyte.

localecorrectamente? ¿Cuál es la lectura de lalocaleinvocación de comandos (sin argumentos)?cutlínea de comando?echo ßßßß | cut -c 2-->�ßßß(LANG=en_US.UTF-8)Respuestas:
GNU coreutils entiende UTF-8 en general. Por ejemplo
echo 哈哈 | wc -m, sale correctamente3en un entorno local UTF-8 (tenga en cuenta que la opción es-m, no-cpor razones históricas, significa bytes).Esto es un error en
cut. Mirando la fuente decut,cuten caracteres simplemente no se implementa: la-copción se trata como un sinónimo de-b.Una solución alternativa es usar awk. GNU awk hace frente a UTF-8 muy bien.
fuente
Esto parece un error en su compilación / versión de
coreutils. Puedo reproducir esto en Ubuntu 10.10 Maverick Meerkat pero no en Fedora 15.Si también está usando Ubuntu, puede informar un error a los
coreutilsempaquetadores de Ubuntu ejecutando el siguiente comando:Actualización: Gilles señala en los comentarios que esto es un error en la versión anterior
coreutilsque Fedora ha parcheado. Puede encontrar su parche aquí si desea intentar parcharlo usted mismo para que funcione.fuente
-cun alias de-b.