Ich versuche, ein rechtes einfaches Anführungszeichen mit tr
in ein Apostroph umzuwandeln .
tr "`echo -e '\xE2\x80\x99'`" "`echo -e '\x27'`" < a > b
eine UTF-8-kodierte Datei namens a
gegeben die dieses Beispiel enthält:
We're not a different species
“All alone?” Jeth mentioned.
OS X verwendet den BSD-tr
und erzeugt ein schönes Ergebnis:
We're not a different species
“All alone?” Jeth mentioned.
Ubuntu verwendet den GNU tr
und produziert dieses fiese Ergebnis:
We'''re not a different species
''<9C>All alone?''<9D> Jeth mentioned.
Wie kann ich diese Konvertierung in Ubuntu durchführen?
Akzeptierte Antwort:
Sie könnten ein anderes Tool wie sed
ausprobieren :
$ sed "s/’/'/g" <a
We're not a different species
“All alone?” Jeth mentioned.
Oder verwenden Sie, da wir eine einfache Übersetzung durchführen, den y
Befehl für sed
:
$ sed "y/’/'/" <a
We're not a different species
“All alone?” Jeth mentioned.
GNU tr
geht vermutlich nicht weil:
Derzeit tr
unterstützt nur Single-Byte-Zeichen vollständig.
Schließlich wird es Multibyte-Zeichen unterstützen; wenn ja, das -C
Option bewirkt, dass es den Zeichensatz ergänzt, während -c
wird dazu führen, dass es den Satz von Werten ergänzt. Diese Unterscheidung spielt
nur eine Rolle, wenn einige Werte keine Zeichen sind, und dies ist
nur in Gebietsschemas möglich, die Multibyte-Codierungen verwenden, wenn die Eingabe
Codierungsfehler enthält.
Und ’
ist ein Multibyte-Zeichen:
$ echo -n \' | wc -c
1
$ echo -n ’ | wc -c
3