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