Portál AbcLinuxu, 23. dubna 2024 22:59


Dotaz: egrep a equivalence classes ([=, =])

30.12.2007 21:27 Michal Vyskočil | skóre: 60 | blog: miblog | Praha
egrep a equivalence classes ([=, =])
Přečteno: 213×
Odpovědět | Admin
V infostránce ke grepu jsem narazil na equivalence classes ([=, =]). Při hledání jsem našel příslušnou normu, manuálovou stránku pro Tru64 a patch pro GNU dokumentaci, která naznačuje, že GNU egrep by to měl umět také.

Jestli jsem to dobře pochopil, tak by to mělo definovat třídu všech znaků, které patří do stejné třídy, takže [=e=] by mohlo být pro češtinu ekvivalentem třeba [eéě]. Ovšem nedokážu rozchodit žádný příklad
$ cat class.txt
e
é
ê
ě
$ LC_ALL=C grep -E '[[=e=]]' class.txt
$ LC_ALL=en_US.UTF-8 grep -E '[[=e=]]' class.txt
e
$ LC_ALL=cs_CZ.UTF-8 grep -E '[[=e=]]' class.txt
e
Přičemž bych předpokládal, že pro češtinu bude [=e=] zahrnovat alespoň diakritiku. Nebo jsem jenom špatně pochopil dokumentaci? Požívám GNU grep verze 2.5.2.
When your hammer is C++, everything begins to look like a thumb.
Nástroje: Začni sledovat (0) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

David Watzke avatar 30.12.2007 22:07 David Watzke | skóre: 74 | blog: Blog... | Praha
Rozbalit Rozbalit vše Re: egrep a equivalence classes ([=, =])
Odpovědět | | Sbalit | Link | Blokovat | Admin
To cos napsal se (u mě, GNU grep 2.5.4-20071119) chová jako množina znaků, matchne tedy jen "e" a "=".
“Being honest may not get you a lot of friends but it’ll always get you the right ones” ―John Lennon
David Watzke avatar 30.12.2007 22:15 David Watzke | skóre: 74 | blog: Blog... | Praha
Rozbalit Rozbalit vše Re: egrep a equivalence classes ([=, =])
Vlastně ne tak docela, to jen když tam dám [=e=]. Je to divný.
“Being honest may not get you a lot of friends but it’ll always get you the right ones” ―John Lennon
David Watzke avatar 30.12.2007 22:21 David Watzke | skóre: 74 | blog: Blog... | Praha
Rozbalit Rozbalit vše Re: egrep a equivalence classes ([=, =])
Když spustíš tohle nebo to dáš do toho souboru vedle sebe, tak to jde...
grep -E -o --color '[[=e=]]' <<< "eéě"
Skoro mi to připadá jako bug...
“Being honest may not get you a lot of friends but it’ll always get you the right ones” ―John Lennon
31.12.2007 01:03 Franta Hanzlík
Rozbalit Rozbalit vše Re: egrep a equivalence classes ([=, =])
Odpovědět | | Sbalit | Link | Blokovat | Admin
Na Fedoře 8 (grep 2.5.1, glibc 2.7) to funguje asi správně - zkoušel jsem grep i egrep, a ruzné patvary písmen a,e,c,i. Hrál jsem si s tím v rámci výuky Linuxu už asi před 3 roky (to tedy mohla být tak Fedora 2) a fungovalo to také správně. Ale jak jsem se díval do zdrojového RPM grepu z Fedory 8, je to oplácané 15 patchi, některé se týkají internacionalizace a multibyte znaků. Ve Fedoře se používá jen proměnná LANG, ale v tom problém nebude, při jejím unset a nastavení LC_CTYPE a LC_COLLATE nebo LC_ALL to jede také v pohodě. Fedora 8 grep je překládán s "--without-included-regex" a linkován s "pcre" (Perl-compatible regular expression library) - to by také mohlo něco ovlivnit.
31.12.2007 10:32 Michal Vyskočil | skóre: 60 | blog: miblog | Praha
Rozbalit Rozbalit vše Re: egrep a equivalence classes ([=, =])
Podle dokumentace by měla být tato vlastnost určena pomocí LC_ALL, LC_COLLATE a LANG, ale ani s LANG mi Susí verze nefunguje. Ale rpmko z Fedory ano, takže některý z těch patchů tuto vlastnost zřejmě opravuje. Nahlásil jsem to jako bug.
When your hammer is C++, everything begins to look like a thumb.

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.