Christoph: ksh-script und regexp

Hallo Leute,
ich ich habe folgendes Problem:
Ich will, einen Dateinamen matchen, sobald ein Großbuchstabe drin vorkommt.
Ich lese die einzelnen Dateinamen mittels

for file in $(find $verzeichnis -type f)
do
...
done

aus und will einen Treffer, sonbald ein Großbuchstabe drin vorkommt.
Ich perl genügt ja dazu sowas wie

if($file =~ m/[A-Z]/)

aber das geht im ksh-script nicht, wenn ich da

if [[ $file == [A-Z] ]]

mache,matcht nichts.
Ich hab das mal mit dem String
XabcdefgX ausprobiert, um den zu matchen braucht man

if [[ "$test" == [A-Z][a-z]*[A-Z] ]]

Hilfe, ich komme nicht weiter.
Danke schonmal für eure Hilfe
Christoph

  1. Für alle die es interessiert, so ist eine Lösung:

    match=echo $file | egrep '[A-Z]'

    dann steht in $match im Falle eines Treffers der Dateiname und andernfalls nichts.

    so long
    Christoph

  2. Hi Christoph,

    Ich lese die einzelnen Dateinamen mittels
    for file in $(find $verzeichnis -type f)
    do
    ...
    done
    aus und will einen Treffer, sonbald ein Großbuchstabe drin vorkommt.

    Hm. Also die Denkweise von Perl auf eine Shell zurück zu übertragen funktioniert in einigen Fällen nicht (sonst hätte man Perl ja gar nicht erfinden müssen).

    Zwei Möglichkeiten fallen mir ein:
    a) Löse das Problem komplett mit "find" (der Parameter "-name" darf auch pattern enthalten - ob das für Deinen Fall ausreicht, kann ich allerdings spontan nicht sagen).
    b) Pipe die find-Ausgabeliste in ein nachfolgendes Filterkommando ("egrep" wurde bereits genannt) oder binde sie via "xargs" an ein solches (oder binde mit "-exec" ein Kommando an die "find"-Ausgabe ... da gibt es viele verschiedene Möglichkeiten).

    Würdest Du die rekursive Verzeichnistraversierung von "find" nicht benötigen, dann wäre an dieser Stelle auch direkt ein regular expression möglich.

    Beachte in jedem Fall, daß Perl regular expressions und shell regular expression nicht syntaxkompatibel sind! Da mußt Du umdenken ... (".*" in Perl ist "*" in ksh, '.' ist '?' etc.)

    Viele Grüße
          Michael

    --
    T'Pol: I apologize if I acted inappropriately.
    V'Lar: Not at all. In fact, your bluntness made me reconsider some of my positions. Much as it has now.
    (sh:| fo:} ch:] rl:( br:^ n4:( ie:% mo:) va:| de:/ zu:| fl:( ss:) ls:~ js:|)
     => http://www.peter.in-berlin.de/projekte/selfcode/?code=sh%3A|+fo%3A}+ch%3A]+rl%3A(+br%3A^+n4%3A(+ie%3A%25+mo%3A)+va%3A|+de%3A%2F+zu%3A|+fl%3A(+ss%3A)+ls%3A~+js%3A|
    Auch diese Signatur wird an korrekt konfigurierte Browser gzip-komprimiert übertragen.
    1. vielen Dank Michael,

      dass .* in Perl = * in ksh ist hat schon einiges erklärt.
      Weißt Du, wo ich ein gutes Tutorial für ksh-regexp finde?
      so long
      Christoph