$ #!/bin/sh $ $ #' --- $ #' title: "Lösungsversuch zum RegEXP-Kurs 03 - egrep" $ #' author: "tegula" $ #' date: " 29 4 2022" $ #' output: html_document $ #' --- $ $ $ $ # ------------------------ $ # ------------------------ $ $ #' **Ursprünglich Aufgaben:** https://debianforum.de/forum/viewtopic.php?t=184043 $ $ #' ** Hier bearbeite Variante:** "Arbeite vorerst mal nur mit den Musterdateien und gehe dafuer die Einheit nochmal durch. Mit Musterdateien ist es wie ich beschreibe. Wenn du es auf der Kommandozeile angibst, dann treten weitere Effekte auf, die dich nun verwirren" ( https://debianforum.de/forum/viewtopic.php?p=1300875#p1300875 ) $ # ------------------------ $ # ------------------------ $ $ $ # AUfgabe 1 bis 6 $ for musterdatei in a1.txt a2.txt a3.txt a4.txt a5.txt a6.txt; do > > printf "${musterdatei}: " # Aufgaben nummer bzw. Dateiname ausgeben > cat ${musterdatei} # Inhalt der Musterdatei ausgeben > printf "\n \n" # Zwei Zeilenumbrüche ausgeben (= mindestens eine Leerzeile) > egrep --line-number -f ${musterdatei} schwaebische-kunde.txt # Muster in schwaebische-kunde.txt suchen > printf "******\n\n" # Trenner zwischen einzelnen Aufgaben >> done a1.txt: a1.txt: Reiter 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, ****** a2.txt: a2.txt: Viel Steine 8:Viel Steine gab's und wenig Brot, ****** a3.txt: a3.txt: heil'gen 4:Zum heil'gen Land gezogen kam, ****** a4.txt: a4.txt: Er sprach: "Sagt an, 53:Er sprach: "Sagt an, mein Ritter werth! ****** a5.txt: a5.txt: eben\. 18:Und kostet's ihn das eigne Leben. ****** a6.txt: a6.txt: \? 54:Wer hat Euch solche Streich' gelehrt?" ****** $ $ # ------------------------ $ # ------------------------ $ $ # Aufgabe 7 (fgrep statt egrep) $ ## --> Unterschied zu Aufgabe 1-6 (egrep): Fragezeichen ("?") und (".") müssen nicht escapet werden, weil fgrep (im Gegens atz zu egrep) die, ihm übergebenen, Muster, immer als literale Wörter interpretiert. $ $ for musterdatei in a1.txt a2.txt a3.txt a4.txt a5_fuer_fgrep.txt a6_fuer_fgrep.txt; do > printf "${musterdatei}: " # Aufgaben nummer bzw. Dateiname ausgeben > cat ${musterdatei} # Inhalt der Musterdatei ausgeben > printf "\n \n" # Zwei Zeilenumbrüche ausgeben (= mindestens eine Leerzeile) > > fgrep --line-number -f ${musterdatei} schwaebische-kunde.txt # Muster in schwaebische-kunde.txt suchen > printf "******\n\n" # Trenner zwischen einzelnen Aufgaben > done a1.txt: a1.txt: Reiter 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, ****** a2.txt: a2.txt: Viel Steine 8:Viel Steine gab's und wenig Brot, ****** a3.txt: a3.txt: heil'gen 4:Zum heil'gen Land gezogen kam, ****** a4.txt: a4.txt: Er sprach: "Sagt an, 53:Er sprach: "Sagt an, mein Ritter werth! ****** a5_fuer_fgrep.txt: a5_fuer_fgrep.txt: eben. 18:Und kostet's ihn das eigne Leben. ****** a6_fuer_fgrep.txt: a6_fuer_fgrep.txt: ? 54:Wer hat Euch solche Streich' gelehrt?" ****** $ $ # ------------------------ $ # ------------------------ $ $ # ------------------------ $ # ------------------------ $ $ # Aufgabe 8 $ $ ## --> Die Mustersuche wird innerhalb der Datei RegExp-Kurs_02_Aufgabe_14.R ( https://debianforum.de/forum/pastebin/?mode= view&s=41639 ) durchgeführt. $ $ # Klammern $ $ ## --> Klammern haben eine Sonderbedeutung innerhalb von egrep --> müssen (auch in Musterdatei) escapet werdem $ cat a8_klammern.txt # Inhalt der Musterdatei ausgeben \( \) \[ \] \{ \} $ egrep --line-number -f a8_klammern.txt RegExp-Kurs_02_Aufgabe_14.R 2:#' title: " Aufgabe 14 (RegExp-Kurs 02: Metazeichen & Escaping)" 11:# R-Pakete (Bibliotheken) laden 19:#' **Aufgabenstellung:** "[Aufgabe] 14) Auf die vorigen Aufgabe aufbauend: Schreibe ein Programm, das den escapeten Text wieder einliest und eine sprachliche Beschreibung davon ausgibt, aehnlich wie in (5). Pruefe damit deine Loesungen fuer die Aufgaben (8) bis (12)" ( https://debianforum.de/forum/viewtopic.php?p=1299654#p1299654 ). 25:beschreiben <- function(ausdruck, escape, standard) { 38: anzahl_zeichen = str_extract_all(string = ausdruck, 39: pattern = "[:print:]", 40: simplify = TRUE) %>% length() 41: zeichenvektor = str_extract_all(str = ausdruck, 42: pattern = "[:print:]", 43: simplify = TRUE) 45: while (i <= anzahl_zeichen) { 46: if ((escape == zeichenvektor[i]) & (standard == "literal")) { 47: zeichenfolge <- paste0(zeichenfolge, 49: zeichenvektor[i + 1], 51: ) 53: } else if ((escape == zeichenvektor[i]) & (standard == "meta")) { 54: zeichenfolge <- paste0(zeichenfolge, 56: zeichenvektor[i + 1], 57: ". ") 59: } else if ((escape != zeichenvektor[i]) & (standard == "literal")) { 60: zeichenfolge <- paste0(zeichenfolge, 62: zeichenvektor[i], 63: ". ") 65: } else if ((escape != zeichenvektor[i]) & (standard == "meta")) { 66: zeichenfolge <- paste0(zeichenfolge, 68: zeichenvektor[i], 69: ". ") 71: } else { 74: } 76: } 78:} 86:beschreiben(ausdruck = "A,BCD,E,FG,,H", 88: standard = "literal") 92:beschreiben(ausdruck = "hello, world", 94: standard = "meta") 97:beschreiben(ausdruck = "Haus", 99: standard = "literal") 102:beschreiben(ausdruck = "Haaus", 104: standard = "literal") 106:beschreiben(ausdruck = "Haaus", 108: standard = "meta") Übereinstimmungen in Binärdatei RegExp-Kurs_02_Aufgabe_14.R $ $ # Sterne $ ## --> Das Sternchen (*) hat eine Sonderbedeutung innerhalb von egrep --> muss (auch in Musterdatei) escapet werdem $ cat a8_sterne.txt # Inhalt der Musterdatei ausgeben \* $ egrep --line-number -f a8_sterne.txt RegExp-Kurs_02_Aufgabe_14.R 19:#' **Aufgabenstellung:** "[Aufgabe] 14) Auf die vorigen Aufgabe aufbauend: Schreibe ein Programm, das den escapeten Text wieder einliest und eine sprachliche Beschreibung davon ausgibt, aehnlich wie in (5). Pruefe damit deine Loesungen fuer die Aufgaben (8) bis (12)" ( https://debianforum.de/forum/viewtopic.php?p=1299654#p1299654 ). 24:#' **Funktion definieren:** Übereinstimmungen in Binärdatei RegExp-Kurs_02_Aufgabe_14.R $ $ # Punkte $ ## --> Der Punkt (".") hat eine Sonderbedeutung innerhalb von egrep --> muss (auch in Musterdatei) escapet werdem $ $ cat a8_punkte.txt # Inhalt der Musterdatei ausgeben \. $ egrep --line-number -f a8_punkte.txt RegExp-Kurs_02_Aufgabe_14.R 19:#' **Aufgabenstellung:** "[Aufgabe] 14) Auf die vorigen Aufgabe aufbauend: Schreibe ein Programm, das den escapeten Text wieder einliest und eine sprachliche Beschreibung davon ausgibt, aehnlich wie in (5). Pruefe damit deine Loesungen fuer die Aufgaben (8) bis (12)" ( https://debianforum.de/forum/viewtopic.php?p=1299654#p1299654 ). 50: ". " 57: ". ") 63: ". ") 69: ". ") Übereinstimmungen in Binärdatei RegExp-Kurs_02_Aufgabe_14.R $