Ausgabe_RegExp-Kurs_05
von tegula- SNIPPET_TEXT:
-
- $ #' ---
- $ #' 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
- 0
- A
- 7
- B
- 9
- F
- Z
- Y
- D
- $ egrep "[[:xdigit:]]" input_a1.txt
- 0
- A
- 7
- B
- 9
- F
- D
- $
- $ #' ------------------------
- $ #' ------------------------
- $
- $ # Aufgabe 2: RE fuer eine dreistellige Ganzzahl
- $ cat input_a2.txt
- 197
- 2022
- 55
- 44.3
- 44,3
- hallo
- 2
- 999
- 1000
- $ ## 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
- 197
- 999
- $
- $ #' ------------------------
- $ #' ------------------------
- $
- $ # Aufgabe 3: "RE fuer eine dreistellige Ganzzahl mit (Pflicht-)Vorzeichen".
- $ cat input_a3.txt
- 700
- -hallo
- -311
- +12
- +1000
- +128
- $ egrep "^(\+|-)[[:digit:]]{3,3}$" input_a3.txt
- -311
- +128
- $
- $ #' ------------------------
- $ #' ------------------------
- $
- $
- $ # 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"
- (^[[:digit:]]{1,1},[[:digit:]]{2,2}[[:space:]](Euro|€)$)|(^[[:digit:]]{1,1}[[:space:]](Euro|€)$)|(^[[:digit:]]{1,3}[[:space:]](Cent|ct|c|¢)$)
- $
- $ ## Input anzeigen
- $ cat input_a4.txt
- 3,35 Euro
- 7 Euro
- 22,66 Euro
- 5,00 Dollar
- 0,10 €
- 555 €
- 10 Cent
- 99 ct
- $
- $ ## Gesamtausdruck auf Input anwenden
- $ egrep $gesamt input_a4.txt
- 3,35 Euro
- 7 Euro
- 0,10 €
- 10 Cent
- 99 ct
- $
- $ #' ------------------------
- $ #' ------------------------
- $
- $ # 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"
- (^(31|30|[012][[:digit:]])(\.)(01)$)|(^(01)(/)(31|30|[012][[:digit:]])$)
- $
- $ # Input anzeigen
- $ cat input_a5.txt
- 31.12
- 31.01
- 05.01
- 06.01
- 40.01
- 01/12
- 01/33
- 04/08
- 01/30
- $
- $ # Gesamtausdruck auf Input anwenden
- $ egrep $gesamt input_a5.txt
- 31.01
- 05.01
- 06.01
- 01/12
- 01/30
- $
- $ #' ------------------------
- $ #' ------------------------
- $
- $ # 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"
- (^(28|27|26|25|24|23|22|21|20|[01][[:digit:]])(\.)(02)$)|(^(02)(/)(28|27|26|25|24|23|22|21|20|[01][[:digit:]])$)
- $
- $ # Input anzeigen
- $ cat input_a6.txt
- 01.02
- 28.02
- 30.02
- 28.07
- 02/09
- 29/02
- 02/11
- $
- $ # Gesamtausdruck auf Input anwenden
- $ egrep $gesamt input_a6.txt
- 01.02
- 28.02
- 02/09
- 02/11
- $
- $ #' ------------------------
- $ #' ------------------------
- $
- $ # Aufgabe 7) RE fuer ein beliebiges Zeichen, das kein Buchstabe is
- $ cat input_a7.txt
- 7
- 45
- A
- (
- H
- X
- ?
- Z
- -
- +
- 0
- 1
- $ egrep "^[^[:alpha:]]$" input_a7.txt
- 7
- (
- ?
- -
- +
- 0
- 1
- $
- $ #' ------------------------
- $ #' ------------------------
- $
- $
- $ # Aufgabe 8) RE für eine beliebige Ziffer (Drei verschiedene Varianten)
- $ cat input_a7.txt
- 7
- 45
- A
- (
- H
- X
- ?
- Z
- -
- +
- 0
- 1
- $ egrep "^[[:digit:]]$" input_a7.txt
- 7
- 0
- 1
- $ egrep "^[0123456789]$" input_a7.txt
- 7
- 0
- 1
- $ egrep "^[0-9]$" input_a7.txt
- 7
- 0
- 1
- $
- $ #' ------------------------
- $ #' ------------------------
- $
- $ # Aufgabe 9) "RE fuer ein Zeichen, das kein Circumflex (^) ist."
- $ cat input_a9.txt
- a
- ^
- ?
- Mehrere_Zeichen
- B
- $ egrep "^[^^]$" input_a9.txt
- a
- ?
- B
- $
- $ #' ------------------------
- $ #' ------------------------
- $
- $
- $ # 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
- -
- +
- a
- 9
- [
- ]
- /
- $ egrep "^(-|\[|\])$" input_a11.txt
- -
- [
- ]
- $
- $ #' ------------------------
- $ #' ------------------------
- $
- $
- $ # Aufgabe 12) "RE die alles ausser einer schliessenden eckigen Klammer oder einem Circumflex matcht".
- $ cat input_a12.txt
- ]
- [
- ^
- a
- 7
- $ egrep "^[^]]" input_a12.txt
- [
- ^
- a
- 7
- $
- $ # Aufgabe 13) "Schreibe zwei verschiedene REs, die beide einen Backslash matchen".
- $ # Input anzeigen
- $ cat input_a13.txt
- \
- /
- A
- z
- 9
- $ ## 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
- hallo du da
- $ egrep "$(printf '[\t]')" input_aufgabe15.txt
- hallo du da
- $
- $ #' ------------------------
- $ #' ------------------------
- $ #'
- $
- $ # 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
- Maier
- Meier
- Mayer
- Meier
- Myer
- Müller
- Maiar
- $ egrep "(^M[ae][iy]er$)|(^Myer$)" input_a16.txt
- Maier
- Meier
- Mayer
- Meier
- Myer
- $
- $ #' ------------------------
- $ #' ------------------------
- $ #' [ENDE]
- $
Quellcode
Hier kannst du den Code kopieren und ihn in deinen bevorzugten Editor einfügen. PASTEBIN_DOWNLOAD_SNIPPET_EXPLAIN