Snažím se převést pravou jednoduchou uvozovku na apostrof pomocí tr .
tr "`echo -e '\xE2\x80\x99'`" "`echo -e '\x27'`" < a > b
soubor s kódováním UTF-8 s názvem a který obsahuje tento příklad:
We're not a different species
“All alone?” Jeth mentioned.
OS X používá BSD tr a vytváří pěkný výsledek:
We're not a different species
“All alone?” Jeth mentioned.
Ubuntu používá GNU tr a výsledkem je tento ošklivý výsledek:
We'''re not a different species
''<9C>All alone?''<9D> Jeth mentioned.
Jak mohu provést tento převod v Ubuntu?
Přijatá odpověď:
Můžete zkusit nějaký jiný nástroj, například sed :
$ sed "s/’/'/g" <a
We're not a different species
“All alone?” Jeth mentioned.
Nebo, protože provádíme jednoduchý překlad, použijte y příkaz pro sed :
$ sed "y/’/'/" <a
We're not a different species
“All alone?” Jeth mentioned.
GNU tr pravděpodobně nefunguje, protože:
Aktuálně
trplně podporuje pouze jednobajtové znaky.
Nakonec bude podporovat vícebajtové znaky; když ano,-Cvolba způsobí, že doplní sadu znaků, zatímco-czpůsobí, že doplní sadu hodnot. Toto rozlišení bude
důležité pouze v případě, že některé hodnoty nejsou znaky, a to je možné
pouze v národních prostředích používajících vícebajtové kódování, pokud vstup obsahuje
chyby kódování.
A ’ je vícebajtový znak:
$ echo -n \' | wc -c
1
$ echo -n ’ | wc -c
3