J'essaie de convertir un guillemet simple droit en une apostrophe en utilisant tr
.
tr "`echo -e '\xE2\x80\x99'`" "`echo -e '\x27'`" < a > b
étant donné un fichier codé UTF-8 appelé a
qui contient cet exemple:
We’re not a different species
“All alone?” Jeth mentioned.
OS X utilise le BSD tr
et produit un joli résultat:
We're not a different species
“All alone?” Jeth mentioned.
Ubuntu utilise le GNU tr
et produit ce résultat désagréable:
We'''re not a different species
''<9C>All alone?''<9D> Jeth mentioned.
Comment puis-je effectuer cette conversion dans Ubuntu?
echo It’s easy | perl -CS -Mutf8 -pe "tr/’/'/"
Réponses:
Vous pouvez essayer un autre outil, comme
sed
:Ou, puisque nous effectuons une traduction simple, utilisez la
y
commande poursed
:GNU
tr
ne fonctionne probablement pas parce que:Et
’
est un caractère multi-octets:la source
sed
est beaucoup plus agréable pour ce genre de travail.tr
remplace chacun des trois octets séparément avec'
, d'où'''
ainsi que les séquences interrompues où il a remplacé deux des trois octets dans les caractères similaires“
et”
. Il doit plutôt comprendre les trois octets comme signifiant ensemble un seul caractère, et les remplacer à la place.’
un caractère multi-octets peut également être utilisétr -c '[:print:][:cntrl:]' '-'
pour remplacer chaque caractère non imprimable , autre que les caractères de contrôle valides, par un-
. Et vous verrez une’
traduction unique à 3 octets de caractères comme---
. bon point pour le caractère multi-octets.Si vous souhaitez également convertir les guillemets doubles et peut-être d'autres caractères, vous pouvez utiliser GNU
iconv
:Le
//TRANSLIT
suffixe indiqueiconv
que pour les caractères en dehors du répertoire de l'encodage cible (ici ASCII), il peut remplacer automatiquement des caractères ou des séquences d'aspect similaire. Sans le suffixe,iconv
abandonnera dès qu'il trouvera un caractère intraduisible.Notez que cela
//TRANSLIT
semble être une extension GNU: POSIXiconv
ne la prend pas en charge.la source
Vous pouvez utiliser l'une de ces
awk
solutions:Ou
la source
Utilisez l'
-s
option detr
:De
man tr
:la source