/ Forside / Teknologi / Operativsystemer / Linux / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
Linux
#NavnPoint
o.v.n. 11177
peque 7911
dk 4814
e.c 2359
Uranus 1334
emesen 1334
stone47 1307
linuxrules 1214
Octon 1100
10  BjarneD 875
stor og smaat i ubuntu 10.10
Fra : Steen Thomassen


Dato : 23-10-10 10:39

Hej

Jeg har lige opgraderet til Ubuntu 10.10 og fik en slem overraskelse:

sat@sat-ubuntu$ grep "^[a-z]" eksempel
Stor ting
smaa ting
sat@sat-ubuntu$ LANG=C grep "^[a-z]" eksempel
smaa ting
sat@sat-ubuntu$ echo $LANG
da_DK.UTF-8

Hvad er ændret i fra version 10.04 til 10.10, så tolkningen af [a-z] er
blevet ændret?

Mvh
Steen

 
 
Kent Friis (23-10-2010)
Kommentar
Fra : Kent Friis


Dato : 23-10-10 11:05

Den Sat, 23 Oct 2010 11:39:06 +0200 skrev Steen Thomassen:
> Hej
>
> Jeg har lige opgraderet til Ubuntu 10.10 og fik en slem overraskelse:
>
> sat@sat-ubuntu$ grep "^[a-z]" eksempel
> Stor ting
> smaa ting
> sat@sat-ubuntu$ LANG=C grep "^[a-z]" eksempel
> smaa ting
> sat@sat-ubuntu$ echo $LANG
> da_DK.UTF-8
>
> Hvad er ændret i fra version 10.04 til 10.10, så tolkningen af [a-z] er
> blevet ændret?

Hvad gør grep -i så?

Mvh
Kent
--
"The Brothers are History"

Steen Thomassen (23-10-2010)
Kommentar
Fra : Steen Thomassen


Dato : 23-10-10 11:37

Den 23-10-2010 12:04, Kent Friis skrev:
> Den Sat, 23 Oct 2010 11:39:06 +0200 skrev Steen Thomassen:
>> Hej
>>
>> Jeg har lige opgraderet til Ubuntu 10.10 og fik en slem overraskelse:
>>
>> sat@sat-ubuntu$ grep "^[a-z]" eksempel
>> Stor ting
>> smaa ting
>> sat@sat-ubuntu$ LANG=C grep "^[a-z]" eksempel
>> smaa ting
>> sat@sat-ubuntu$ echo $LANG
>> da_DK.UTF-8
>>
>> Hvad er ændret i fra version 10.04 til 10.10, så tolkningen af [a-z] er
>> blevet ændret?
>
> Hvad gør grep -i så?

Som forventet:
sat@sat-ubuntu$ grep -i stor eksempel
Stor ting
sat@sat-ubuntu$ grep stor eksempel
sat@sat-ubuntu$ grep -i Smaa eksempel
smaa ting
sat@sat-ubuntu$ grep Smaa eksempel
sat@sat-ubuntu$

Mvh
Steen

Kent Friis (23-10-2010)
Kommentar
Fra : Kent Friis


Dato : 23-10-10 13:19

Den Sat, 23 Oct 2010 12:36:31 +0200 skrev Steen Thomassen:
> Den 23-10-2010 12:04, Kent Friis skrev:
>> Den Sat, 23 Oct 2010 11:39:06 +0200 skrev Steen Thomassen:
>>> Hej
>>>
>>> Jeg har lige opgraderet til Ubuntu 10.10 og fik en slem overraskelse:
>>>
>>> sat@sat-ubuntu$ grep "^[a-z]" eksempel
>>> Stor ting
>>> smaa ting
>>> sat@sat-ubuntu$ LANG=C grep "^[a-z]" eksempel
>>> smaa ting
>>> sat@sat-ubuntu$ echo $LANG
>>> da_DK.UTF-8
>>>
>>> Hvad er ændret i fra version 10.04 til 10.10, så tolkningen af [a-z] er
>>> blevet ændret?
>>
>> Hvad gør grep -i så?
>
> Som forventet:
> sat@sat-ubuntu$ grep -i stor eksempel
> Stor ting
> sat@sat-ubuntu$ grep stor eksempel
> sat@sat-ubuntu$ grep -i Smaa eksempel
> smaa ting
> sat@sat-ubuntu$ grep Smaa eksempel
> sat@sat-ubuntu$

Øh, i det oprindelige eksempel, gjorde den som om -i altid var sat når
sproget stod til DK.

Nu gør den så ikke?

Det ligner en bug.

Mvh
Kent
--
"The Brothers are History"

Klaus Ellegaard (23-10-2010)
Kommentar
Fra : Klaus Ellegaard


Dato : 23-10-10 13:27

Kent Friis <nospam@nospam.invalid> writes:

>Det ligner en bug.

Det tror jeg ikke. Jeg tror bare, det er det danske locale, der er
blevet ændret igen-igen. Det er jo lidt risikabelt at bruge andet
end C, hvis man er til avancerede ting eller bruger shell-scripts
i det hele taget.

Hvis jeg ikke husker helt galt, vil det danske locale også sortere
"aa" efter "z", fordi det tolkes som "å". Det kan godt gøre en hel
del ting forvirret.

Mvh.
   Klaus, der aldrig bruger andet end en_US og ISO-8859-1.

Kent Friis (23-10-2010)
Kommentar
Fra : Kent Friis


Dato : 23-10-10 13:33

Den Sat, 23 Oct 2010 12:26:36 +0000 (UTC) skrev Klaus Ellegaard:
> Kent Friis <nospam@nospam.invalid> writes:
>
>>Det ligner en bug.
>
> Det tror jeg ikke. Jeg tror bare, det er det danske locale, der er
> blevet ændret igen-igen.

Når den det ene øjeblik betragter store og små bogstaver som det samme,
og det andet øjeblik ser dem som forskellige, så jo, det ligner en bug.

Derudover, så har grep en option (-i), som fortæller hvorvidt man vil
se forskel på store eller små bogstaver eller ej. Det bør locale ikke
ændre på.

Umiddelbart vil jeg mene at grep bruger locale forkert i det ene
tilfælde.

> Hvis jeg ikke husker helt galt, vil det danske locale også sortere
> "aa" efter "z", fordi det tolkes som "å". Det kan godt gøre en hel
> del ting forvirret.

Korrekt. Og hvis grep lister å når man søger efter aa, ville jeg
heller ikke betragte det som en bug.

Mvh
Kent
--
"The Brothers are History"

Klaus Ellegaard (23-10-2010)
Kommentar
Fra : Klaus Ellegaard


Dato : 23-10-10 13:37

Kent Friis <nospam@nospam.invalid> writes:

>Når den det ene øjeblik betragter store og små bogstaver som det samme,
>og det andet øjeblik ser dem som forskellige, så jo, det ligner en bug.

Eller en opgradering til en ny og forbedret version? (Ud fra nogle
relativt ukendte definitioner på "ny og forbedret")

>Derudover, så har grep en option (-i), som fortæller hvorvidt man vil
>se forskel på store eller små bogstaver eller ej. Det bør locale ikke
>ændre på.

grep, ja. Men det har shell'en jo ikke. Hvis locale-teamet mener, at
"echo [a-z]*" skal give en liste over alle filer, der starter med
små OG store bogstaver, så er det jo "works as designed".

Mvh.
   Klaus.

Kent Friis (23-10-2010)
Kommentar
Fra : Kent Friis


Dato : 23-10-10 13:52

Den Sat, 23 Oct 2010 12:37:28 +0000 (UTC) skrev Klaus Ellegaard:
> Kent Friis <nospam@nospam.invalid> writes:
>
>>Når den det ene øjeblik betragter store og små bogstaver som det samme,
>>og det andet øjeblik ser dem som forskellige, så jo, det ligner en bug.
>
> Eller en opgradering til en ny og forbedret version? (Ud fra nogle
> relativt ukendte definitioner på "ny og forbedret")

Der kunne selvfølgelig være installeret en opdatering i mellemtiden,
som har løst problemet. Det må Steen lige be/afkræfte.

>>Derudover, så har grep en option (-i), som fortæller hvorvidt man vil
>>se forskel på store eller små bogstaver eller ej. Det bør locale ikke
>>ændre på.
>
> grep, ja. Men det har shell'en jo ikke. Hvis locale-teamet mener, at
> "echo [a-z]*" skal give en liste over alle filer, der starter med
> små OG store bogstaver, så er det jo "works as designed".

Begge tilfælde var grep. Ikke shell'en.

Mvh
Kent
--
"The Brothers are History"

Klaus Ellegaard (23-10-2010)
Kommentar
Fra : Klaus Ellegaard


Dato : 23-10-10 13:54

Kent Friis <nospam@nospam.invalid> writes:

>> grep, ja. Men det har shell'en jo ikke. Hvis locale-teamet mener, at
>> "echo [a-z]*" skal give en liste over alle filer, der starter med
>> små OG store bogstaver, så er det jo "works as designed".

>Begge tilfælde var grep. Ikke shell'en.

De bruger samme locale og dermed samme regelsæt.

Mvh.
   Klaus.

Kent Friis (23-10-2010)
Kommentar
Fra : Kent Friis


Dato : 23-10-10 14:48

Den Sat, 23 Oct 2010 12:53:55 +0000 (UTC) skrev Klaus Ellegaard:
> Kent Friis <nospam@nospam.invalid> writes:
>
>>> grep, ja. Men det har shell'en jo ikke. Hvis locale-teamet mener, at
>>> "echo [a-z]*" skal give en liste over alle filer, der starter med
>>> små OG store bogstaver, så er det jo "works as designed".
>
>>Begge tilfælde var grep. Ikke shell'en.
>
> De bruger samme locale og dermed samme regelsæt.

Argumentet er stadig at i det ene tilfælde var "S" et lille s, i det
andet tilfælde var det IKKE. Det tyder på at i det ene tilfælde bruges
locale forkert.

Mvh
Kent
--
"The Brothers are History"

Klaus Ellegaard (23-10-2010)
Kommentar
Fra : Klaus Ellegaard


Dato : 23-10-10 16:42

Kent Friis <nospam@nospam.invalid> writes:

>Argumentet er stadig at i det ene tilfælde var "S" et lille s, i det
>andet tilfælde var det IKKE. Det tyder på at i det ene tilfælde bruges
>locale forkert.

Nej da, det er bare det danske locale, der definerer, at små og
store bogstaver er ligemeget. Det viser netop, at det virker som
designet.

"grep" gør, hvad den får besked på af det aktive locale, så den
virker også, som den skal.

Man kan diskutere, om det danske locale så er smart, hvilket jeg
personligt ikke mener. Men jeg mener, at hele locale-konceptet er
fundamentalt defekt, så jeg er nok ikke den rette at spørge.

Mvh.
   Klaus.

Kent Friis (23-10-2010)
Kommentar
Fra : Kent Friis


Dato : 23-10-10 16:57

Den Sat, 23 Oct 2010 15:41:59 +0000 (UTC) skrev Klaus Ellegaard:
> Kent Friis <nospam@nospam.invalid> writes:
>
>>Argumentet er stadig at i det ene tilfælde var "S" et lille s, i det
>>andet tilfælde var det IKKE. Det tyder på at i det ene tilfælde bruges
>>locale forkert.
>
> Nej da, det er bare det danske locale, der definerer, at små og
> store bogstaver er ligemeget. Det viser netop, at det virker som
> designet.

Det var jo kun ligemeget i det ene eksempel.

Det må iøvrigt være en anden dansk "locale" end den vi lærte i
folkeskolen. Der var store og små bogstaver absolut ikke lige meget.

> "grep" gør, hvad den får besked på af det aktive locale, så den
> virker også, som den skal.

Hvad siger det danske locale om hvor i en regexp store og små bogstaver
er ligeemget, og hvor de IKKE er?

Mvh
Kent
--
"The Brothers are History"

Klaus Ellegaard (23-10-2010)
Kommentar
Fra : Klaus Ellegaard


Dato : 23-10-10 17:22

Kent Friis <nospam@nospam.invalid> writes:

>> "grep" gør, hvad den får besked på af det aktive locale, så den
>> virker også, som den skal.

>Hvad siger det danske locale om hvor i en regexp store og små bogstaver
>er ligeemget, og hvor de IKKE er?

Det er vist forklaret i den anden deltråd.

Husk på at "grep" og venner ikke skal tænke over, hvad den skal
matche på. De skal bare gøre, hvad det aktuelle locale siger,
de skal gøre.

Hvilket i praksis betyder, at man skal køre med "C" locale eller
risikere, at ting opfører sig tumpet.

Mvh.
   Klaus.

Kent Friis (23-10-2010)
Kommentar
Fra : Kent Friis


Dato : 23-10-10 17:25

Den Sat, 23 Oct 2010 16:21:54 +0000 (UTC) skrev Klaus Ellegaard:
> Kent Friis <nospam@nospam.invalid> writes:
>
>>> "grep" gør, hvad den får besked på af det aktive locale, så den
>>> virker også, som den skal.
>
>>Hvad siger det danske locale om hvor i en regexp store og små bogstaver
>>er ligeemget, og hvor de IKKE er?
>
> Det er vist forklaret i den anden deltråd.
>
> Husk på at "grep" og venner ikke skal tænke over, hvad den skal
> matche på. De skal bare gøre, hvad det aktuelle locale siger,
> de skal gøre.

Skal de? Eller gør de bare, fordi en eller anden syntes det var smart
uden at tænke over konsekvenserne?

Mvh
Kent
--
"The Brothers are History"

Kent Friis (23-10-2010)
Kommentar
Fra : Kent Friis


Dato : 23-10-10 17:32

Den 23 Oct 2010 16:25:06 GMT skrev Kent Friis:
> Den Sat, 23 Oct 2010 16:21:54 +0000 (UTC) skrev Klaus Ellegaard:
>> Kent Friis <nospam@nospam.invalid> writes:
>>
>>>> "grep" gør, hvad den får besked på af det aktive locale, så den
>>>> virker også, som den skal.
>>
>>>Hvad siger det danske locale om hvor i en regexp store og små bogstaver
>>>er ligeemget, og hvor de IKKE er?
>>
>> Det er vist forklaret i den anden deltråd.
>>
>> Husk på at "grep" og venner ikke skal tænke over, hvad den skal
>> matche på. De skal bare gøre, hvad det aktuelle locale siger,
>> de skal gøre.
>
> Skal de? Eller gør de bare, fordi en eller anden syntes det var smart
> uden at tænke over konsekvenserne?

Det ændrer iøvrigt ikke på at jeg mener grep bruger locale forkert.

Hvis jeg nu var dansk-lærer, og ville finde alle de steder en elev
ikke skrev med stort efter punktum, ville jeg kunne skrive:
"\. *[a-å]". Det kræver dansk locale. Men fordi grep bruger
sorterings-reglerne, til at finde ud af hvad der er små bogstaver,
vil det alligevel ikke virke.

Mvh
Kent
--
"The Brothers are History"

Steen Thomassen (24-10-2010)
Kommentar
Fra : Steen Thomassen


Dato : 24-10-10 12:59

Den 23-10-2010 14:26, Klaus Ellegaard skrev:
> Kent Friis<nospam@nospam.invalid> writes:
>
>> Det ligner en bug.
>
>    Klaus, der aldrig bruger andet end en_US og ISO-8859-1.

Mit problem i denne sammenhæng, hvor det script kommer fra og hvor jeg
så problemet, at jeg skal kunne håndtere tegn, der ikke er med i ISO-8859-1.

Mvh
Steen


Bjarne (23-10-2010)
Kommentar
Fra : Bjarne


Dato : 23-10-10 16:41

Steen Thomassen wrote:

> Hej
>
> Jeg har lige opgraderet til Ubuntu 10.10 og fik en slem overraskelse:
>
> sat@sat-ubuntu$ grep "^[a-z]" eksempel
> Stor ting
> smaa ting
> sat@sat-ubuntu$ LANG=C grep "^[a-z]" eksempel
> smaa ting
> sat@sat-ubuntu$ echo $LANG
> da_DK.UTF-8
>
> Hvad er ændret i fra version 10.04 til 10.10, så tolkningen af [a-z] er
> blevet ændret?
>
> Mvh
> Steen
Min OpenSuse 11.3 gør det samme. Min FreeBSD 8.0 gør som "forventet".

Det har noget med character classes og locale at gøre:

Suse$ grep '^[a-z]' eks
Stor ting
smaa ting

Suse$ echo LC_ALL
LC_ALL

Suse$ export LC_ALL=C
Suse$ grep '^[a-z]' eks
smaa ting


FreeBSD$ grep "^[a-z]" eks
smaa ting

FreeBSD$ echo LC_ALL
LC_ALL


Fra Linux : man grep :
Character Classes and Bracket Expressions
A bracket expression is a list of characters enclosed by [ and ]. It matches any single character in that list; if the first
character of the list is the caret ^ then it matches any character not in the list. For example, the regular expression
[0123456789] matches any single digit.

Within a bracket expression, a range expression consists of two characters separated by a hyphen. It matches any single
character that sorts between the two characters, inclusive, using the locale's collating sequence and character set. For
example, in the default C locale, [a-d] is equivalent to [abcd]. Many locales sort characters in dictionary order, and in
these locales [a-d] is typically not equivalent to [abcd]; it might be equivalent to [aBbCcDd], for example. To obtain the
traditional interpretation of bracket expressions, you can use the C locale by setting the LC_ALL environment variable to the
value C.

Finally, certain named classes of characters are predefined within bracket expressions, as follows. Their names are self
explanatory, and they are [:alnum:], [:alpha:], [:cntrl:], [:digit:], [:graph:], [:lower:], [:print:], [:punct:], [:space:],
[:upper:], and [:xdigit:]. For example, [[:alnum:]] means [0-9A-Za-z], except the latter form depends upon the C locale and
the ASCII character encoding, whereas the former is independent of locale and character set. (Note that the brackets in
these class names are part of the symbolic names, and must be included in addition to the brackets delimiting the bracket
expression.) Most meta-characters lose their special meaning inside bracket expressions. To include a literal ] place it
first in the list. Similarly, to include a literal ^ place it anywhere but first. Finally, to include a literal - place it
last.




--
mvh,
Bjarne

Kent Friis (23-10-2010)
Kommentar
Fra : Kent Friis


Dato : 23-10-10 17:06

Den Sat, 23 Oct 2010 17:40:32 +0200 skrev Bjarne:
>
> Within a bracket expression, a range expression consists of two characters separated by a hyphen. It matches any single
> character that sorts between the two characters, inclusive, using the locale's collating sequence and character set. For
> example, in the default C locale, [a-d] is equivalent to [abcd]. Many locales sort characters in dictionary order, and in
> these locales [a-d] is typically not equivalent to [abcd]; it might be equivalent to [aBbCcDd], for example. To obtain the
> traditional interpretation of bracket expressions, you can use the C locale by setting the LC_ALL environment variable to the
> value C.

Det forklarer det. Men så vil jeg stadig mene at det er grep der er
forkert på den. Den skal ikke sortere, og uanset hvordan man sorterer
store og små bogstaver, er S stadig ikke i kategorien "små bogstaver
mellem a og z".

Hvis man var ligeglad med store og små bogstaver, ville man have
angivet "-i".

Mvh
Kent
--
"The Brothers are History"

Steen Thomassen (24-10-2010)
Kommentar
Fra : Steen Thomassen


Dato : 24-10-10 12:53

Den 23-10-2010 17:40, Bjarne skrev:
> Steen Thomassen wrote:
>
>> Hej
>>
>> Jeg har lige opgraderet til Ubuntu 10.10 og fik en slem overraskelse:
>>
>> sat@sat-ubuntu$ grep "^[a-z]" eksempel
>> Stor ting
>> smaa ting
>> sat@sat-ubuntu$ LANG=C grep "^[a-z]" eksempel
>> smaa ting
>> sat@sat-ubuntu$ echo $LANG
>> da_DK.UTF-8
>>
>> Hvad er ændret i fra version 10.04 til 10.10, så tolkningen af [a-z] er
>> blevet ændret?
>>
>> Mvh
>> Steen
> Min OpenSuse 11.3 gør det samme. Min FreeBSD 8.0 gør som "forventet".
>
> Det har noget med character classes og locale at gøre:

Okay.

> Fra Linux : man grep :
> Character Classes and Bracket Expressions
> A bracket expression is a list of characters enclosed by [ and ]. It matches any single character in that list; if the first
> character of the list is the caret ^ then it matches any character not in the list. For example, the regular expression
> [0123456789] matches any single digit.

Tak for det gode svar.... og henvisning hvor der står noget så kan jeg
kommer videre og blive klogere på det emne. Jeg har prøvet det på 2
forskellige maskiner - og det var flere andre locales som gjorde det
samme. Så det måtte være en sammenhæng...

Mvh
Steen

Søg
Reklame
Statistik
Spørgsmål : 177415
Tips : 31962
Nyheder : 719565
Indlæg : 6407849
Brugere : 218876

Månedens bedste
Årets bedste
Sidste års bedste