Nachhilfe in regulären Ausdrücken gesucht.

Antworten
Nachricht
Autor
Benutzeravatar
Lateralus
prolinux-forum-admin
Beiträge: 1238
Registriert: 05. Mai 2004 7:35

Nachhilfe in regulären Ausdrücken gesucht.

#1 Beitrag von Lateralus » 01. Jan 2009 23:35

Ich würde gerne mit grep eine Datei nach regulären Ausdrücken durchsuchen, die Versionsnummern von Programmen darstellen. Zeilen mit diesen Zeichenketten sollen z.B. gefunden werden:

Code: Alles auswählen

programm-0.1.1d
programm-0.1
programm-1.5.6a
Nun dachte ich, dass der Befehl dafür, so aussehen muss:

Code: Alles auswählen

grep -e "programm-&#91;0123456789&#93;+&#91;&#91;.&#93;&#91;0123456789&#93;+&#93;*&#91;abcdefghijklmnopqrstuvwxyz&#93;?" <datei>
Aber ich bekomme die Fehlermeldung "Unmatched [ or [^" und damit kann ich nicht viel anfangen, außer, dass anscheinend die Verschachtung der eckigen Klammern nicht richtig ist - aber wie mache ich das sonst?

PDA

#2 Beitrag von PDA » 02. Jan 2009 0:48

Spannender ist die Frage was es nicht finden darf.
Ich mache es einfach mal so da ich ja nicht genau weiß wie eine solche Datei aussehen kann.

programm-NUMMER PUNKT NUMMER danach egal

Code: Alles auswählen

programm-&#91;&#91;&#58;digit&#58;&#93;&#93;&#91;.&#93;&#91;&#91;&#58;digit&#58;&#93;&#93;
Findet (Beispiel)

Code: Alles auswählen

programm-0.1.1d
programm-0.1
programm-1.5_patch
programm-6.3r
Findet nicht (Beispiel)

Code: Alles auswählen

programm-6.z
programm-9
programm-5..

Benutzeravatar
Janka
Beiträge: 3581
Registriert: 11. Feb 2006 19:10

#3 Beitrag von Janka » 02. Jan 2009 15:25

[] ist keine Klammerebene, sondern eine Syntax für Zeichenklasse. Die kannst du nicht verschachteln! Wenn du schachteln willst, musst du die gewöhnlichen Klammern verwenden. Außerdem musst du Punkte maskieren.

Janka
Ich vertonne Spam immer in /dev/dsp statt /dev/null.
Ich mag die Schreie.

Benutzeravatar
hastifranki
Beiträge: 259
Registriert: 06. Mai 2006 19:58

#4 Beitrag von hastifranki » 03. Jan 2009 10:38

Hallo,

ich bin auf folgenden Befehl gekommen:

Code: Alles auswählen

grep -E "programm-&#91;0-9&#93;\.&#91;0-9&#93;&#40;\.&#91;0-9&#93;&#91;a-z&#93;&#41;?$" <datei>
Viele Grüße
Frank

Antworten