reguläre Ausdrücke regex erlernen

Warum Debian und/oder eine seiner Spielarten? Was muss ich vorher wissen? Wo geht es nach der Installation weiter?
Antworten
Benutzeravatar
bigbootykilla
Beiträge: 53
Registriert: 03.09.2006 19:15:41
Kontaktdaten:

reguläre Ausdrücke regex erlernen

Beitrag von bigbootykilla » 20.07.2010 13:30:27

Hallo Leute,

ich bin kurz vorm verzweifeln. Unser Professor nervt uns tierisch ab mit Linux regex in jeder Form. Leider kann ich mir selbst kaum helfen, dass zu erlernen, da ich überhaupt nicht weiß wie man sowas am besten erlernt. Es geht halt um Dinge wie sed, grep, egrep und die immer am schwächsten zu wählende Quotierung. Dateinamen lauten dann oftmals auch --$$@!! oder sowas in der Art.

Meine Frage lautet, wie fange ich da am besten an? um Aufgaben wie:
Geben Sie an, in wie vielen Zeilen der Datei "RohText.txt" nach der
Ersetzung von "Vorname" und "Nachname" Zeichenketten vorkommen, die
folgenden Mustern entsprechen:

(a) eine "5", gefolgt von einer nichtleeren Sequenz aus "5", "a", oder
"6", gefolgt von "b"
Zeichen
--> Verwendete Befehle: egrep -c 5[56a]b RohText.txt

---> falsches Suchmuster

--> Anzahl Zeilen: 0

(b) eine natürliche Zahl, gefolgt von ".", gefolgt von einer weiteren
natürlichen Zahl.
--> Verwendete Befehle: egrep -c [0-9]+.[0-9]+ RohText.txt

--> Anzahl Zeilen: 1827
--> sind Kommentare vom Professor der schon beim ersten gemeckert hat, dass es sich hier um ein falsches Suchmuster handelt.

Eine Weitere Aufgabe:
Versehen Sie die Datei "Personen.txt" mit einer Zeilennumerierung,
der Gestalt
1.)
2.)
3.)
etc.

--> Verwendete Befehle: egrep -n "" Personen.txt | sed -E "s%([0-9]+)%\1.)%g" > Personen.txt


---> warum "g" ??
--> hier frägt der Prof warum "g" ?

all das sind für mich im Moment noch spanische Dörfer und ich muss darin auch noch eine Klausur schreiben. Ich bitte da um Hilfe oder um Links die mir das ganze Thema vielleicht einstiegshaft mit paar erklärten Beispielen erläutern können.

Vielen Dank
gruß bigbootykilla
It's no measure of health to be well adjusted to a profoundly sick society

uname
Beiträge: 12497
Registriert: 03.06.2008 09:33:02

Re: reguläre Ausdrücke regex erlernen

Beitrag von uname » 20.07.2010 13:47:48

Du muss es an Beispielen nachvollziehen. Im Zweifel bei Google suchen.

Code: Alles auswählen

egrep -c 5[56a]b RohText.txt
Scheint mir korrekt zu sein, wenn ich die Aufgabe richtig verstanden habe. Im Zweifel mal das "-c" weglassen und schauen welche Zeilen falsch sind.

Code: Alles auswählen

egrep -c [0-9]+.[0-9]+ RohText.txt
Eher so

Code: Alles auswählen

egrep -c [0-9]\.[0-9] RohText.txt
Plus hat dort nichts zu suchen. Der Punkt benötigt ein Backslash, da er ein Sonderzeichen ist (wäre sonst ein beliebiges Zeichen).

roli
Beiträge: 3174
Registriert: 10.09.2003 17:39:58

Re: reguläre Ausdrücke regex erlernen

Beitrag von roli » 20.07.2010 14:18:33

Hi,

mir faellt da folgendes ein, nach dem man suchen koennte:
-"Regex Trainer"
-"regex sheet cheat"
-es gibt diverse RegEx Bücher, mit "hunderten Seiten"

Es gibt Tage, da denke ich, RegExE sind eine eigene Sprache!
Roland


"Aber wenn du schon so unwissend bist, davon noch nicht gehört zu haben,
so will ich es doch als gut ansehen, daß du lieber einmal töricht fragst,
als weiterhin nichts von etwas zu wissen, das man doch wissen sollte."
aus "Die Edda des Snorri Sturluson", "Gylfis Täuschung"

Benutzeravatar
Meillo
Moderator
Beiträge: 9281
Registriert: 21.06.2005 14:55:06
Wohnort: Balmora
Kontaktdaten:

Re: reguläre Ausdrücke regex erlernen

Beitrag von Meillo » 20.07.2010 15:03:52

Was heißt schon ``die schwächste Quotierung''? Überhaupt ist sowas Schwachsinn. Man sollte immer die Quotierung verwenden die am wenigsten Zusatzarbeit benötigt.

Meint er, dass man nur mit Backslashes quotieren soll?

Eben hier haben wir dann schon so ein Problem:
uname hat geschrieben: Eher so

Code: Alles auswählen

egrep -c [0-9]\.[0-9] RohText.txt
Plus hat dort nichts zu suchen. Der Punkt benötigt ein Backslash, da er ein Sonderzeichen ist (wäre sonst ein beliebiges Zeichen).
Der Backslash wird nämlich schon von der Shell verwertet und egrep bekommt dann doch keinen Backslash vor dem Punkt. So sieht es besser aus:

Code: Alles auswählen

egrep -c [0-9]\\.[0-9] RohText.txt
(ungetestet)


Zu (b):
Die Frage mit dem `g' ist durchaus berechtigt.


Allgemeine Tipps:
- Zuerst *genau* überlegen was die RegExp tun soll, und dann Schritt für Schritt incrementell aufbauen. Dabei jeden Schritt testen.
- RegExps quotiert man üblicher und sinnvollerweise einfach immer mit Single-Quotes.
Use ed once in a while!

Benutzeravatar
hikaru
Moderator
Beiträge: 13975
Registriert: 09.04.2008 12:48:59

Re: reguläre Ausdrücke regex erlernen

Beitrag von hikaru » 20.07.2010 15:55:58

uname hat geschrieben:

Code: Alles auswählen

egrep -c 5[56a]b RohText.txt
Scheint mir korrekt zu sein, wenn ich die Aufgabe richtig verstanden habe. Im Zweifel mal das "-c" weglassen und schauen welche Zeilen falsch sind.
Ist nicht ganz korrekt. Die Aufgabe:
bigbootykilla hat geschrieben:(a) eine "5", gefolgt von einer nichtleeren Sequenz aus "5", "a", oder
"6", gefolgt von "b"
Eine Sequenz kann Wiederholungen beinhalten. Demzufolge fehlt ein Plus (weil nicht leere Sequenz):

Code: Alles auswählen

egrep -c 5[56a]+b RohText.txt
uname hat geschrieben:

Code: Alles auswählen

egrep -c [0-9]+.[0-9]+ RohText.txt
Eher so

Code: Alles auswählen

egrep -c [0-9]\.[0-9] RohText.txt
Plus hat dort nichts zu suchen.
Das Plus ist im Ausgangsbeispiel korrekt. Die Aufgabe:
bigbootykilla hat geschrieben:(b) eine natürliche Zahl, gefolgt von ".", gefolgt von einer weiteren natürlichen Zahl.
Eine natürliche Zahl kann auch mehrstellig sein, auch vor dem Punkt. (Es geht um Zahlen, nicht um Ziffern.)
Der Backslash fehlte da natürlich trotzdem.
Meillo hat geschrieben:Was heißt schon ``die schwächste Quotierung''? Überhaupt ist sowas Schwachsinn. Man sollte immer die Quotierung verwenden die am wenigsten Zusatzarbeit benötigt.
Ack!
Meillo hat geschrieben:Der Backslash wird nämlich schon von der Shell verwertet und egrep bekommt dann doch keinen Backslash vor dem Punkt.
Ein weiterer Streitpunkt. Technisch hast du recht, aber das hat dann nur noch begrenzt was mit Regex an sich zu tun wenn ich auch das Verhalten der umgebenden Shell noch berücksichtigen soll. Zumindest muss man das konzeptuell trennen, was ich gerade beim Erlernen von Regex ungünstig finde, denn dann schleift sich irgendwann der Doppelbackslash ein "weil das nun mal so muss" und nicht weil man gelernt hat zwischen Regex und Shell zu differenzieren.

Ich vermute stark, dass die von bigbootykilla geposteten Aufgabenzitate aus dem Zusammenhang gerissen sind (weil es nicht um Regex an sich, sondern vielleicht um deren Anwendung in einer Shell geht), der Prof selbst konzeptuelle Defizite hat die er durch Versuch und Irrtum umschifft, oder er die Aufgaben aus dem Zusammenhang gerissen bzw. von jemandem geklaut hat der selbst diese Defizite hat. Dass das Beispiel mit dem Punkt ohne Backslash unbeanstandet durchging lässt mich vermuten, dass die Kontrolle entweder schlampig war oder der Prof Defizite hat.

Unabhängig von den Regex finde ich immer noch die Manpages zu den entsprechenden Programmen als sinnvollsten Startpunkt zum Lernen (untermauert mit praktischen Beispielen).

uname
Beiträge: 12497
Registriert: 03.06.2008 09:33:02

Re: reguläre Ausdrücke regex erlernen

Beitrag von uname » 20.07.2010 16:03:03

Gut, dass ich mein Informatik-Studium erfolgreich beendet habe. Wahrscheinlich wäre ich mit meinen Angaben durchgefallen.

Benutzeravatar
hikaru
Moderator
Beiträge: 13975
Registriert: 09.04.2008 12:48:59

Re: reguläre Ausdrücke regex erlernen

Beitrag von hikaru » 20.07.2010 16:10:40

Mir wäre es nicht besser ergangen. Ich mag zwar in den Regex selbst bzw. im Interpretieren der Aufgabenstellung sicherer sein, aber dafür hätte ich erstmal man egrep wälzen müssen um das auch anwenden zu können.
Regex sehe ich fast nur noch innerhalb von Perl- und PHP-Scripts. Genau deshalb wäre mir der Shell-Backslash von allein nicht aufgefallen. Und deshalb finde ich auch die saubere formale Trennung zwischen beiden so wichtig.

Benutzeravatar
Meillo
Moderator
Beiträge: 9281
Registriert: 21.06.2005 14:55:06
Wohnort: Balmora
Kontaktdaten:

Re: reguläre Ausdrücke regex erlernen

Beitrag von Meillo » 20.07.2010 17:09:42

hikaru hat geschrieben:Mir wäre es nicht besser ergangen. Ich mag zwar in den Regex selbst bzw. im Interpretieren der Aufgabenstellung sicherer sein, aber dafür hätte ich erstmal man egrep wälzen müssen um das auch anwenden zu können.
Ich sehe darin keine Schwäche. Es ist gar nicht sinnvoll die ganzen kleinen Details zu kennen, eben deshalb hat Unix ja seine Manpages -- man liest einfach nach.

Reale Implementierungen spiegeln den Standard (welchen überhaupt?) sowieso meist nicht genau wider. Also muss man ja doch in der jeweiligen Dokumentation nachlesen.
Use ed once in a while!

Benutzeravatar
hikaru
Moderator
Beiträge: 13975
Registriert: 09.04.2008 12:48:59

Re: reguläre Ausdrücke regex erlernen

Beitrag von hikaru » 20.07.2010 17:29:57

Meillo hat geschrieben:Ich sehe darin keine Schwäche. Es ist gar nicht sinnvoll die ganzen kleinen Details zu kennen, eben deshalb hat Unix ja seine Manpages -- man liest einfach nach.
Sehe ich genauso. Ich wollte nur verdeutlichen, dass ich aus dem Stehgreif so eine Prüfung auch nicht bestehen würde, und dass ich mir sicher bin, dass uname mit einer Regex-Übersicht sicher auch besser abschneiden würde als er denkt.

Benutzeravatar
tschaefer
Beiträge: 138
Registriert: 03.09.2004 09:51:48
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: Garmisch-Partenkirchen, Germany
Kontaktdaten:

Re: reguläre Ausdrücke regex erlernen

Beitrag von tschaefer » 20.07.2010 21:40:46

... ach wie schön die FH Worms ... schönen Gruß an Prof. Dr. W. D. ;-)
Debian bullseye
dwm-6.4
Linux bullseye 6.12.9+bpo-amd64
CPU AMD Ryzen 7 5700U
Memory total 24576M
Screenshot: http://sau.frubar.net/39339

Benutzeravatar
bigbootykilla
Beiträge: 53
Registriert: 03.09.2006 19:15:41
Kontaktdaten:

Re: reguläre Ausdrücke regex erlernen

Beitrag von bigbootykilla » 21.07.2010 23:57:39

.. ach wie schön die FH Worms ... schönen Gruß an Prof. Dr. W. D. ;-)
*lach* genau bei dem muss ich das schreiben! Beim Herr Prof. Dr. W. Döringer! Total der Freak.... :mrgreen: ehemaliger IBM Mitarbeiter für K.I. :D

also wie ich sehe bleibt mir wohl nichts anderes übrig als üben üben üben bis man diese regex effektiv nutzen kann. Das mit der Quotierung ist da auch so ein eigenes Thema. Gibt ja ne starke ' ', weniger starke " " und schwache Quotierung \

Mal schauen, ich denke ich werd mir mal ein Buch über regex zulegen, falls ich es überhaupt nicht auf die Reihe bekomme. :(

lg bigbootykilla
It's no measure of health to be well adjusted to a profoundly sick society

Benutzeravatar
Duff
Beiträge: 6321
Registriert: 22.03.2005 14:36:03
Wohnort: /home/duff

Re: reguläre Ausdrücke regex erlernen

Beitrag von Duff » 22.07.2010 07:44:27

Das Buch "Reguläre Ausdrücke" von O'Reilly ist nicht schlecht.

(Alternativ müsste man vielleicht mal meillo um einen Vortrag bitten ;-))
Oh, yeah!

rendegast
Beiträge: 15041
Registriert: 27.02.2006 16:50:33
Lizenz eigener Beiträge: MIT Lizenz

Re: reguläre Ausdrücke regex erlernen

Beitrag von rendegast » 22.07.2010 08:36:21

http://www.gnu.org/software/gawk/manual/gawk.html

Reguläre Ausdrücke
http://mozart.nt.fh-koeln.de/pits/regex.html

AN INTRODUCTION TO AWK
http://allman.rhon.itam.mx/dcomp/awk.html

http://de.linwiki.org/wiki/Linuxfibel_- ... euge_-_Sed
http://de.linwiki.org/wiki/Linuxfibel_- ... euge_-_Awk

Sysadmin-Aufgaben mit AWK bewältigen « 10 « 2004 « Ausgaben « ABO & ARCHIV « Linux-Magazin Online
http://www.linux-magazin.de/heft_abo/au ... zaubereien


Die man-page zu sed finde ich schlecht,
hilfreicher war mir 'man awk'.


Bei egrep quote ich fast immer:
'egrep ^ii ....' oder 'egrep bla$ ...' geht noch,
'egrep "^ii[a-r]*" .....'
mfg rendegast
-----------------------
Viel Eifer, viel Irrtum; weniger Eifer, weniger Irrtum; kein Eifer, kein Irrtum.
(Lin Yutang "Moment in Peking")

Benutzeravatar
Meillo
Moderator
Beiträge: 9281
Registriert: 21.06.2005 14:55:06
Wohnort: Balmora
Kontaktdaten:

Re: reguläre Ausdrücke regex erlernen

Beitrag von Meillo » 22.07.2010 10:49:16

bigbootykilla hat geschrieben: Gibt ja ne starke ' ', weniger starke " " und schwache Quotierung \
Das ist jedenfalls keine offizielle Bezeichnung. Was die Single- und Double-Quotes betrifft, bei denen kann man das so sagen, aber die Backslashes sind was ganz anderes. IMO kann man durchaus argumentieren, dass die Backslashes das stärkste Quoting sind.

Mal schauen, ich denke ich werd mir mal ein Buch über regex zulegen, falls ich es überhaupt nicht auf die Reihe bekomme. :(
Duff hat geschrieben:Das Buch "Reguläre Ausdrücke" von O'Reilly ist nicht schlecht.
Das ist aber auch ein dicker Schinken den man nicht mal so auf die Schnelle durcharbeiten kann. Wenn du's eher für die Prüfung lernen willst und ein bisschen für den wöchentlichen Gebrauch, dann lohnt sich das Buch nicht.

Übe lieber viel auf der Kommandozeile und les ein paar Websites dazu, das bringt dir da mehr.

(Alternativ müsste man vielleicht mal meillo um einen Vortrag bitten ;-))
Hehe. ;-)

Ich glaube da gäb's Geeignetere dafür, insbesondere für die theoretischen Grundlagen. Aber danke für das Lob.
Use ed once in a while!

roli
Beiträge: 3174
Registriert: 10.09.2003 17:39:58

Re: reguläre Ausdrücke regex erlernen

Beitrag von roli » 23.07.2010 10:39:37

Hi,

wie ich da so gerade mit meinen Kaffee sitze, bemerke ich das ich heute die vi Referenz Tasse erwischt habe, das gibt's auch fuer RegEx'e, z.B. hier: Regular Expressions Quick-Referenz Kaffee Haferl
Wuerde sowas als Pfuschzettel waehrend einer Pruefung gewertet :mrgreen:
Roland


"Aber wenn du schon so unwissend bist, davon noch nicht gehört zu haben,
so will ich es doch als gut ansehen, daß du lieber einmal töricht fragst,
als weiterhin nichts von etwas zu wissen, das man doch wissen sollte."
aus "Die Edda des Snorri Sturluson", "Gylfis Täuschung"

Antworten