RegExp-Kurs_05.sh
von tegula- SNIPPET_DESC:
- Bitte Dateinamensendung ".txt" entfernen.
- SNIPPET_CREATION_TIME:
- 10.05.2022 22:18:56
- SNIPPET_PRUNE_TIME:
- Unendlich
- SNIPPET_TEXT:
-
- #!/bin/sh
- #' ---
- #' title: "Lösungsversuch zum RegEXP-Kurs im Debianforum"
- #' author: "tegula"
- #' date: " 10 05 2022"
- #' output: html_document
- #' ---
- #' ------------------------
- #' ------------------------
- #' **Kurs-Teil:** 05 - Zeichenklassen
- #' **URL:** https://debianforum.de/forum/viewtopic.php?p=1301642#p1301642
- #' ------------------------
- #' ------------------------
- # Aufgabe 1: "Re für eine Hexadezimalziffer""
- cat input_a1.txt
- egrep "[[:xdigit:]]" input_a1.txt
- #' ------------------------
- #' ------------------------
- # Aufgabe 2: RE fuer eine dreistellige Ganzzahl
- cat input_a2.txt
- ## Muster (für eine dreistellige Zahl muss folgendes sein: Anfang der Zeichenkette "^", dreimal hintereinander Dezimalziffer ("[[:digit:]]{3,3}, Ende der Zeichenkette ("$")
- egrep "^[[:digit:]]{3,3}$" input_a2.txt
- #' ------------------------
- #' ------------------------
- # Aufgabe 3: "RE fuer eine dreistellige Ganzzahl mit (Pflicht-)Vorzeichen".
- cat input_a3.txt
- egrep "^(\+|-)[[:digit:]]{3,3}$" input_a3.txt
- #' ------------------------
- #' ------------------------
- # Aufgabe 4: "RE fuer einen Euro-und-Cent-Betrag kleiner 10,- [Euro]"
- ## Unterausdrücke definieren und als Shell-Variablen abspeichern
- euro_und_cent="^[[:digit:]]{1,1},[[:digit:]]{2,2}[[:space:]](Euro|€)$" # 0,00 Euro bis 10,00 Euro
- nur_euro="^[[:digit:]]{1,1}[[:space:]](Euro|€)$" # 0 Euro bis 10 Euro
- nur_cent="^[[:digit:]]{1,3}[[:space:]](Cent|ct|c|¢)$" # 0 Cent bis 1000 Cent
- ## Gesamtausdruck aus den Unterausdrücken zusammenfügen und als Shell-Variablen abspeichern
- gesamt="(${euro_und_cent})|(${nur_euro})|(${nur_cent})"
- printf "${gesamt}\n"
- ## Input anzeigen
- cat input_a4.txt
- ## Gesamtausdruck auf Input anwenden
- egrep $gesamt input_a4.txt
- #' ------------------------
- #' ------------------------
- # Aufgabe 5) "RE fuer die 31 Tage des Januars (zweistelliges Format mit fuehrender Null). Zwei Varianten".
- # Unterausdrucke definieren
- tag_zuerst="^(31|30|[012][[:digit:]])(\.)(01)$"
- monat_zuerst="^(01)(/)(31|30|[012][[:digit:]])$"
- # Gesamtausdruck zusammenfügen
- gesamt="(${tag_zuerst})|(${monat_zuerst})"
- printf "${gesamt}\n"
- # Input anzeigen
- cat input_a5.txt
- # Gesamtausdruck auf Input anwenden
- egrep $gesamt input_a5.txt
- #' ------------------------
- #' ------------------------
- # Aufgabe 6) "6) RE fuer die 28 Tage des Februars (zweistelliges Format mit fuehrender Null). Zwei Varianten."
- #' ------------------------
- #' ------------------------
- # Aufgabe 5) "RE fuer die 31 Tage des Januars (zweistelliges Format mit fuehrender Null). Zwei Varianten".
- #' ------------------------
- #' ------------------------
- # Unterausdrucke definieren
- tag_zuerst="^(28|27|26|25|24|23|22|21|20|[01][[:digit:]])(\.)(02)$"
- monat_zuerst="^(02)(/)(28|27|26|25|24|23|22|21|20|[01][[:digit:]])$"
- # Gesamtausdruck zusammenfügen
- gesamt="(${tag_zuerst})|(${monat_zuerst})"
- printf "${gesamt}\n"
- # Input anzeigen
- cat input_a6.txt
- # Gesamtausdruck auf Input anwenden
- egrep $gesamt input_a6.txt
- #' ------------------------
- #' ------------------------
- # Aufgabe 7) RE fuer ein beliebiges Zeichen, das kein Buchstabe is
- cat input_a7.txt
- egrep "^[^[:alpha:]]$" input_a7.txt
- #' ------------------------
- #' ------------------------
- # Aufgabe 8) RE für eine beliebige Ziffer (Drei verschiedene Varianten)
- cat input_a7.txt
- egrep "^[[:digit:]]$" input_a7.txt
- egrep "^[0123456789]$" input_a7.txt
- egrep "^[0-9]$" input_a7.txt
- #' ------------------------
- #' ------------------------
- # Aufgabe 9) "RE fuer ein Zeichen, das kein Circumflex (^) ist."
- cat input_a9.txt
- egrep "^[^^]$" input_a9.txt
- #' ------------------------
- #' ------------------------
- # Aufgabe 10) "RE fuer eine Zeichenklasse, die nur einen Circumflex matcht.""
- egrep "^[\^]$" input_a9.txt
- #' ------------------------
- #' ------------------------
- # Aufgabe 11) RE fuer ein Minus oder eine eckige Klammer.
- cat input_a11.txt
- egrep "^(-|\[|\])$" input_a11.txt
- #' ------------------------
- #' ------------------------
- # Aufgabe 12) "RE die alles ausser einer schliessenden eckigen Klammer oder einem Circumflex matcht".
- cat input_a12.txt
- egrep "^[^]]" input_a12.txt
- # Aufgabe 13) "Schreibe zwei verschiedene REs, die beide einen Backslash matchen".
- # Input anzeigen
- cat input_a13.txt
- ## Variante 1
- egrep '\\' input_a13.txt # Auf Shell sind hier anscheinend zwingend einfache (statt dopelte) Anführungszeichen notwendig (??)
- ## Variante 2
- egrep "[\]" input_a13.txt # Auf Shell sind hier anscheinend zwingend einfach Anführungszeichen notwendig
- #' ------------------------
- #' ------------------------
- # Aufgabe 14) "Was matcht die Zeichenklasse `[A-z]' ausser Buchstaben sonst noch? (Zeichensatz: US-ASCII)"
- #' --> Konnte diese Aufgabe nicht lösen.
- #' ------------------------
- #' ------------------------
- # Aufgabe 15) "RE, die einen Tab matcht. Versuche mehrere Varianten zu finden."
- ## Inputdatei erstellen
- printf "hallo du da\nhallo\tdu\tda" > input_aufgabe15.txt
- ## RE auf Inputdatei anwenden
- ### Anmerkung: Das Vorgehen (Umweg über printf), um Tabulator eingeben zu können, habe ich folgender URL entnommen: https://askubuntu.com/a/53096
- egrep "$(printf '\t')" input_aufgabe15.txt
- egrep "$(printf '[\t]')" input_aufgabe15.txt
- #' ------------------------
- #' ------------------------
- #'
- # Aufgabe 16) "Schreibe einen egrep-Ausdruck (nun auch mit Zeichenklassen), um die Schreibweisen Maier, Meier, Mayer, Meier und Myer zu matchen."
- cat input_a16.txt
- egrep "(^M[ae][iy]er$)|(^Myer$)" input_a16.txt
- #' ------------------------
- #' ------------------------
- #' [ENDE]
Quellcode
Hier kannst du den Code kopieren und ihn in deinen bevorzugten Editor einfügen. PASTEBIN_DOWNLOAD_SNIPPET_EXPLAIN