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