Metazeichen und Casesensitivity

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

Hinweis: In dem Thema Metazeichen und Casesensitivity gibt es 3 Antworten. Der letzte Beitrag () befindet sich ganz unten auf dieser Seite.
  • Metazeichen und Casesensitivity

    Hi zusammen,
    bisher war es so, dass wenn ich "ls -l [A-Z]*" eingegeben habe, ich auch nur Dateien angezeigt bekam, die mit Grossbuchstaben beginnen.
    Jetzt bekomme ich alle (na ja, fast alle) angezeigt. die Datei abcdefg wird nicht angezeigt. Die Datei info.txt aber schon. Das hat für mich jegliche Logik verlohren. Alle alten scripte werden also jetzt nicht mehr korrekt laufen?
    Ich benutze SUSE-Linux 11.4 64Bit und ich arbeite auf der bash, aber bei SUSE-Linux 11.3 klappt es auch nicht.

    Kann mir da jemand weiterhelfen?

    Für den Inhalt des Beitrages 31644 haftet ausdrücklich der jeweilige Autor: Black_Jack_1959

  • Hallo,

    Deine Frage ist leider etwas schwierig zu beantworten... :D

    Das Problem ist ,dass 'xyz' in

    Quellcode

    1. > ls -l xyz

    *keine* 'regexp' (regular expression) ist. Es ist stattdessen ein 'globbing'

    Siehe die man page

    Quellcode

    1. > man 7 glob

    Es kann sein, dass

    Quellcode

    1. [A-F] = [ABCDEF]

    oder

    Quellcode

    1. [A-F] = [AbBcCdDeEfF] >>> ohne das 'a' !!!

    wohingegen

    Quellcode

    1. [a-f] = [aAbBcCdDeEf] >>> ohne das 'F' !!!

    usw.

    Was genau jetzt gilt ist von Deinem 'environment' abhängig. Zum Beispiel:

    Quellcode

    1. > locale
    2. LANG=en_US.UTF-8
    3. LC_CTYPE="en_US.UTF-8"
    4. LC_NUMERIC="en_US.UTF-8"
    5. LC_TIME="en_US.UTF-8"
    6. LC_COLLATE="en_US.UTF-8"
    7. LC_MONETARY="en_US.UTF-8"
    8. LC_MESSAGES="en_US.UTF-8"
    9. LC_PAPER="en_US.UTF-8"
    10. LC_NAME="en_US.UTF-8"
    11. LC_ADDRESS="en_US.UTF-8"
    12. LC_TELEPHONE="en_US.UTF-8"
    13. LC_MEASUREMENT="en_US.UTF-8"
    14. LC_IDENTIFICATION="en_US.UTF-8"
    15. LC_ALL=
    16. >
    Alles anzeigen

    und hier insbesondere die Variable

    Quellcode

    1. LC_COLLATE

    Wenn Du (z.B.) ein Verz. mit folgenden Dateien hast:

    Quellcode

    1. Abc.txt
    2. Bcd.txt
    3. Cde.txt
    4. abc.txt
    5. bcd.txt
    6. cde.txt

    Dann ergibt

    Quellcode

    1. > LC_COLLATE="en_US" ls -1 [A-C]*
    2. Abc.txt
    3. bcd.txt
    4. Bcd.txt
    5. cde.txt
    6. Cde.txt
    7. >

    >>> abc.txt ist nicht dabei weil nicht in [A-C] enthalten!

    Quellcode

    1. > LC_COLLATE="en_US" ls -1 [A-C]*
    2. Abc.txt
    3. bcd.txt
    4. Bcd.txt
    5. cde.txt
    6. Cde.txt
    7. >


    Quellcode

    1. > LC_COLLATE="C" ls -1 [A-C]*
    2. Abc.txt
    3. Bcd.txt
    4. Cde.txt
    5. bcd.txt
    6. cde.txt
    7. >


    Quellcode

    1. > LC_COLLATE="C" ls -1 [a-c]*
    2. Abc.txt
    3. Bcd.txt
    4. abc.txt
    5. bcd.txt
    6. cde.txt
    7. >

    >>> Cde.txt ist nicht dabei weil nicht in [a-c] enthalten!

    Willst Du also nur Abc.*, Bcd.* und Cde.* finden, dann braucht es eine explizite Spezifikation (ohne '-'):

    Quellcode

    1. > ls -l [ABC]*

    Die Sache ist, wie gesagt, nicht ganz so einfach wie vielleicht erwartet.

    Siehe hier:

    faqs.org/docs/bashman/bashref_35.html

    Gruss,
    Roland

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von rme ()

    Für den Inhalt des Beitrages 31651 haftet ausdrücklich der jeweilige Autor: rme

  • vielen Dank,
    hat leider nicht geholfen.
    aber wie rme schon mitteilt, habe ich die gleiche Frage auch in http://www.linux-club.de gepostet.
    Auch hier sorry für das Multiposting bzw. Crossposting.
    kommt nicht wieder vor.
    Habe dazu auch was unter http://www.linux-club.de geschrieben.
    Und Danke für die Hilfe

    Für den Inhalt des Beitrages 31659 haftet ausdrücklich der jeweilige Autor: Black_Jack_1959