Estoy tratando de convertir una comilla simple a un apóstrofe usando tr.
tr "`echo -e '\xE2\x80\x99'`" "`echo -e '\x27'`" < a > b
dado un archivo codificado UTF-8 llamado aque contiene este ejemplo:
We’re not a different species
“All alone?” Jeth mentioned.
OS X usa el BSD try produce un buen resultado:
We're not a different species
“All alone?” Jeth mentioned.
Ubuntu usa GNU try 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?

echo It’s easy | perl -CS -Mutf8 -pe "tr/’/'/"Respuestas:
Puedes probar alguna otra herramienta, como
sed:O, como estamos haciendo una traducción simple, use el
ycomando parased:GNU
trno funciona presumiblemente porque:Y
’es un personaje multibyte:fuente
sedes mucho mejor para este tipo de trabajo.trestá reemplazando cada uno de los tres bytes por separado con', por'''lo tanto , así como las secuencias rotas donde ha reemplazado dos de los tres bytes en los caracteres similares“y”. En su lugar, debe comprender los tres bytes como si significaran un carácter, y reemplazarlos en su lugar.’es un carácter multibyte, también podemos usar eltr -c '[:print:][:cntrl:]' '-'comando para reemplazar todos los caracteres que no se imprimen , que no sean caracteres de control válidos, con a-. Y verá una’traducción única a 3 bytes de caracteres como---. Buen punto para el carácter de varios bytes.Si también desea convertir las comillas dobles, y quizás otros caracteres, puede usar GNU
iconv:El
//TRANSLITsufijo diceiconvque para caracteres fuera del repertorio de la codificación de destino (aquí ASCII), puede sustituir automáticamente caracteres o secuencias de aspecto similar. Sin el sufijo, seiconvrendirá tan pronto como encuentre un personaje intraducible.Tenga en cuenta que
//TRANSLITparece ser una extensión de GNU: POSIXiconvno lo admite.fuente
Puede usar una de estas
awksoluciones:O
fuente
-sOpción de uso detr:De
man tr:fuente