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ě
tr
plně podporuje pouze jednobajtové znaky.
Nakonec bude podporovat vícebajtové znaky; když ano,-C
volba způsobí, že doplní sadu znaků, zatímco-c
způ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