Estoy tratando de convertir una comilla simple derecha en un apóstrofo usando tr
.
tr "`echo -e '\xE2\x80\x99'`" "`echo -e '\x27'`" < a > b
dado un archivo codificado en UTF-8 llamado a
que contiene este ejemplo:
We're not a different species
“All alone?” Jeth mentioned.
OS X usa el BSD tr
y produce un buen resultado:
We're not a different species
“All alone?” Jeth mentioned.
Ubuntu usa GNU tr
y produce este desagradable resultado:
We'''re not a different species
''<9C>All alone?''<9D> Jeth mentioned.
¿Cómo puedo lograr esta conversión en Ubuntu?
Respuesta aceptada:
Podría probar alguna otra herramienta, como sed
:
$ sed "s/’/'/g" <a
We're not a different species
“All alone?” Jeth mentioned.
O, dado que estamos haciendo una traducción simple, use el y
comando para sed
:
$ sed "y/’/'/" <a
We're not a different species
“All alone?” Jeth mentioned.
GNU tr
no funciona presumiblemente porque:
Actualmente tr
admite completamente solo caracteres de un solo byte.
Eventualmente admitirá caracteres de varios bytes; cuando lo hace, el -C
hará que complemente el conjunto de caracteres, mientras que -c
hará que complemente el conjunto de valores. Esta distinción
importará solo cuando algunos valores no sean caracteres, y esto es posible
solo en entornos locales que usan codificaciones multibyte cuando la entrada contiene
errores de codificación.
Y ’
es un carácter multibyte:
$ echo -n \' | wc -c
1
$ echo -n ’ | wc -c
3