$ #!/bin/sh $ $ #' --- $ #' title: "Lösungsversuch zum RegEXP-Kurs im Debianforum" $ #' author: "tegula" $ #' date: " 01 05 2022" $ #' output: html_document $ #' --- $ $ $ #' ------------------------ $ #' ------------------------ $ $ #' **Kurs-Teil:** 04 - Konkatenation, Alternation, Unterausdruecke $ #' **URL:** https://debianforum.de/forum/viewtopic.php?t=184095 $ $ #' ------------------------ $ #' ------------------------ $ $ # Aufgabe 1) Schreibe einen egrep-Ausdruck, der sowohl eine Alternation enthaelt als auch das Pipezeichen literal matcht und wende ihn auf einen dazu passenden Eingabetext an. $ ## "Reiter" oder "|Läufer" $ egrep --line-number "Reiter|\|Läufer" schwaebische-kunde.txt 9:Und mancher deutsche Reitersmann 12:Fast musst' der Reiter die Maehre tragen. 22:Fuenfzig tuerkische Reiter daher, 37:Er schwingt es auf des Reiters Kopf, $ $ #' ------------------------ $ #' ------------------------ $ $ $ # Aufgabe 2) Finde ein inhaltlich sinnvolles Beispiel fuer eine zwei- oder dreifach verschachtelte Alternation. ;-) $ egrep --line-number "Reit(er|ar)" schwaebische-kunde.txt 9:Und mancher deutsche Reitersmann 12:Fast musst' der Reiter die Maehre tragen. 22:Fuenfzig tuerkische Reiter daher, 37:Er schwingt es auf des Reiters Kopf, $ $ #' ------------------------ $ #' ------------------------ $ $ # Aufgabe 3) Schreibe einen egrep-Ausdruck (nur mit Alternation und Unterausdruecken), um die Schreibweisen Maier, Meier, Mayer, Meier zu matchen. $ cat a3.txt Maier Meier Müller Mayer Meier $ printf "\n" $ egrep --line-number "M(a|e)(i|y)er" a3.txt 1:Maier 2:Meier 4:Mayer 5:Meier $ $ #' ------------------------ $ #' ------------------------ $ $ # Aufgabe 4) Ergaenze (3) um die Schreibeweise Myer. $ cat a4.txt Maier Meier Müller Mayer Meier Myer $ printf "\n" $ egrep --line-number "M(a|e)(i|y)er|Myer" a4.txt 1:Maier 2:Meier 4:Mayer 5:Meier 6:Myer $ $ #' ------------------------ $ #' ------------------------ $ $ # Aufgabe 5) Finde alternative Ausdruecke fuer (3) und (4) (ohne andere RE-Operatoren zu verwenden, sondern nur indem du anders gruppierst). $ egrep --line-number "Maier|Meier|Mayer|Meier" a3.txt 1:Maier 2:Meier 4:Mayer 5:Meier $ printf "\n" $ egrep --line-number "Maier|Meier|Mayer|Meier|Myer" a4.txt 1:Maier 2:Meier 4:Mayer 5:Meier 6:Myer $ $ #' ------------------------ $ #' ------------------------ $ $ # Aufgabe 6) Versuche diese Aufgaben auch mit fgrep umzusetzen. Was sind deine Erkenntnisse? $ $ ## ... zu Aufgabe 1: $ ### Musterdatei erzeugen $ printf "Reiter\n|Läufer" > muster_a1.txt $ # nach Mustern suchen $ fgrep -f muster_a1.txt schwaebische-kunde.txt Und mancher deutsche Reitersmann Fast musst' der Reiter die Maehre tragen. Fuenfzig tuerkische Reiter daher, Er schwingt es auf des Reiters Kopf, $ ## ... zu Aufgabe 2: $ ### Musterdatei erzeugen $ printf "Reiter\nReitar" > muster_a2.txt $ ### Nach Mustern suchen $ fgrep -f muster_a2.txt schwaebische-kunde.txt Und mancher deutsche Reitersmann Fast musst' der Reiter die Maehre tragen. Fuenfzig tuerkische Reiter daher, Er schwingt es auf des Reiters Kopf, $ ## ... zu Aufgabe 3: $ ### Musterdatei erzeugen $ printf "Maier\nMeier\nMayer\nMeier" > muster_a3.txt $ ### Nach Mustern suchen $ fgrep -f muster_a3.txt a3.txt Maier Meier Mayer Meier $ ## ... zu Aufgabe 4: $ ### Musterdatei erzeugen $ printf "Maier\nMeier\nMayer\nMeier\nMyer" > muster_a4.txt $ ### Nach Mustern suchen $ fgrep -f muster_a4.txt a4.txt Maier Meier Mayer Meier Myer $ ## ... zu Aufgabe 5: $ ### --> **Erkenntnis:** Gruppiertung ist nicht möglich, da fgrep nur feste Suchmuster unterstützt (?). $ $ #' ------------------------ $ #' ------------------------ $ $ # Aufgabe 7) Braucht man runde Klammern um den gesamten Ausdruck wenn man eine Alternation (auf oberster Ebene) verwendet? $ $ #' **ANTWORT:** Nein (vgl. Lösungsansatz zu Aufgabe 5). $ $ #' ------------------------ $ #' ------------------------ $ $ #' [ENDE] $