sed & case sensitivity

Miloslav Trmac mitr na volny.cz
Pondělí Březen 31 13:06:19 CEST 2003


On Mon, Mar 31, 2003 at 12:40:46PM +0200, Jirka Kosina wrote:
> Zdravim,
> $ echo 'aAbBcCdD' | sed 's/[a-z]/!/g' nedostane odpoved !A!B!C!D (kterou
> bych ocekaval), ale !!!!!!!! - takze to vypada, ze se sed pri
> specifikovani rozsahu v regularnim vyrazu chova case-insensitivne.
<povzdech>
Kdy uz se lidi nauci, jak uz to melo fungovat peknych par let...
</povzdech>

Range expressions jsou POSIXem definovany pouze pro LC_COLLATE="C" nebo
"POSIX", a popsany pomoci tridici sekvence LC_COLLATE. Pro vyse zminena
locale toto poradi odpovida ASCII, a [a-z] a [A-Z] jsou tudiz case
sensitive.

Pro cestinu a vetsinu normalnich jazyku je LC_COLLATE "slovnikove",
tj. AaBbCcDdEeFf nebo aAbBcC, tedy [A-Z] obsahuje prinejmensim
BbCc...XxYy. POSIX vysledky range expressions mimo vyse uvedene dve
locale vubec nespecifikuje, toto je obvykla a rozumna implementace.

Secteno a podtrzeno:
Pokud v programu pouzivate range-expressions, na zacatek patri
export LC_COLLATE=POSIX
(nebo LC_COLLATE=POSIX grep ... ).

Druha varianta (jako nove autoconfy) je vypsat [ABCDEFGH...XYZ]
explicitne.
	Mirek


Další informace o konferenci Linux