Ich versuche , ein konvertieren Rechte einfachen Anführungszeichen zu einem Apostroph mit tr
.
tr "`echo -e '\xE2\x80\x99'`" "`echo -e '\x27'`" < a > b
gegeben eine UTF-8-codierte Datei namens, a
die dieses Beispiel enthält:
We’re not a different species
“All alone?” Jeth mentioned.
OS X verwendet das BSD tr
und liefert ein schönes Ergebnis:
We're not a different species
“All alone?” Jeth mentioned.
Ubuntu verwendet die GNU tr
und erzeugt dieses böse Ergebnis:
We'''re not a different species
''<9C>All alone?''<9D> Jeth mentioned.
Wie kann ich diese Konvertierung in Ubuntu durchführen?
echo It’s easy | perl -CS -Mutf8 -pe "tr/’/'/"
Antworten:
Sie könnten ein anderes Werkzeug versuchen, wie
sed
:Oder verwenden Sie den
y
Befehl fürsed
:GNU
tr
funktioniert vermutlich nicht, weil:Und
’
ist ein Multibyte-Charakter:quelle
sed
ist viel schöner für diese Art von Arbeit.tr
jedes der drei Bytes separat durch'
, daher'''
ebenso wie die unterbrochenen Sequenzen, in denen zwei der drei Bytes in den ähnlichen Zeichen“
und ersetzt wurden”
. Stattdessen sollten die drei Bytes zusammen ein Zeichen bedeuten und stattdessen ersetzt werden.’
handelt es sich um ein Multibyte-Zeichen. Außerdem können wir dentr -c '[:print:][:cntrl:]' '-'
Befehl verwenden, um jedes nicht druckbare Zeichen außer gültigen Steuerzeichen durch ein zu ersetzen-
. Und Sie werden sehen, wie einzelne’
in 3 Bytes von Zeichen wie übersetzt werden---
. guter Punkt für Multi-Byte-Zeichen.Wenn Sie auch die doppelten Anführungszeichen und möglicherweise andere Zeichen konvertieren möchten, können Sie GNU verwenden
iconv
:Das
//TRANSLIT
Suffix gibt an,iconv
dass Zeichen außerhalb des Repertoires der Zielcodierung (hier ASCII) ähnlich aussehende Zeichen oder Sequenzen automatisch ersetzen können. Ohne das Suffixiconv
gibt es auf, sobald es einen nicht übersetzbaren Charakter findet.Beachten Sie, dass
//TRANSLIT
dies eine GNU-Erweiterung zu sein scheint: POSIXiconv
unterstützt sie nicht.quelle
Sie können eine dieser
awk
Lösungen verwenden:Oder
quelle
Verwenden Sie die
-s
Optiontr
:Von
man tr
:quelle