Table of Contents
Záludné chování či chyby základních programů
bash
"Verbatim expansion"
Velmi užitečná je konstrukce $'…
' v bashi, provádí jen interpretaci zpětného lomítka podle standardu ANSI a jinak ničeho jiného:
09:22 obo-desktop ~$ echo $'\x41' A
sort
Nastavení locale ovlivňuje výsledek
sort
je známý tím, že třídí různě podle toho, jak máte nastavené locale
. Jestli třídění proběhne korektně česky v českém locale jsem nestudoval.
Takto sort
přesvědčíte, aby třídil podle bytů (čísel znaků), nikoli podle nějaké interpretace, jak asi vypadá obrázek písmene toho čísla:
env LC_ALL=C sort < vstup > výstup
Nastavení je dobré i pro případy, kdy vaše řádky obsahují různé symboly. Ukázkový rozdíl:
08:56$ sort < clipin ahoj <ahoj "ahoj 08:56$ env LC_ALL=C sort < clipin "ahoj <ahoj ahoj
Kódování souboru může vést ke špatným výsledkům
Pokud máte na konzoli UTF-8 a soubor clipin
v ISO-8859-2, může vás sort -u
nemile překvapit: neodliší ě
od š
nebo č
.
23:01 sol8 ~$ iconv -f latin2 -t utf8 < clipin ě š ě č 23:01 sol8 ~$sort -u < clipin | iconv -f latin2 -t utf8 ě 23:00 sol8 ~$env LC_ALL=C sort -u < clipin | iconv -f latin2 -t utf8 š č ě
iconv
jsem ve všech případech přidal, abych na konzoli vypsal soubor v UTF-8, jak konzole čeká.
uniq
Stejně jako sort
, i uniq
podléhá locale.
Stejně jako sort
, i uniq
se divně chová k souborům v nějakém kódování. (Ano, rozumíte správně, opravdu říkám, že uniq se chová divně ke všem souborům )