NoPaste

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:
  1. #!/bin/sh
  2.  
  3. #' ---
  4. #' title: "Lösungsversuch zum RegEXP-Kurs im Debianforum"
  5. #' author: "tegula"
  6. #' date: " 10 05 2022"
  7. #' output: html_document
  8. #' ---
  9.  
  10.  
  11. #' ------------------------
  12. #' ------------------------
  13.  
  14. #' **Kurs-Teil:** 05 -  Zeichenklassen
  15. #' **URL:** https://debianforum.de/forum/viewtopic.php?p=1301642#p1301642
  16.  
  17. #' ------------------------
  18. #' ------------------------
  19.  
  20. # Aufgabe 1: "Re für eine Hexadezimalziffer""
  21. cat input_a1.txt
  22. egrep "[[:xdigit:]]" input_a1.txt
  23.  
  24. #' ------------------------
  25. #' ------------------------
  26.  
  27. # Aufgabe 2: RE fuer eine dreistellige Ganzzahl
  28. cat input_a2.txt
  29. ## Muster (für eine dreistellige Zahl muss folgendes sein: Anfang der Zeichenkette "^", dreimal hintereinander Dezimalziffer ("[[:digit:]]{3,3}, Ende der Zeichenkette ("$")
  30. egrep "^[[:digit:]]{3,3}$"  input_a2.txt
  31.  
  32. #' ------------------------
  33. #' ------------------------
  34.  
  35. # Aufgabe 3: "RE fuer eine dreistellige Ganzzahl mit (Pflicht-)Vorzeichen".
  36. cat input_a3.txt
  37. egrep "^(\+|-)[[:digit:]]{3,3}$" input_a3.txt
  38.  
  39. #' ------------------------
  40. #' ------------------------
  41.  
  42.  
  43. # Aufgabe 4: "RE fuer einen Euro-und-Cent-Betrag kleiner 10,- [Euro]"
  44.  
  45. ## Unterausdrücke definieren und als Shell-Variablen abspeichern
  46. euro_und_cent="^[[:digit:]]{1,1},[[:digit:]]{2,2}[[:space:]](Euro|€)$" # 0,00 Euro bis 10,00 Euro
  47. nur_euro="^[[:digit:]]{1,1}[[:space:]](Euro|€)$" # 0 Euro bis 10 Euro
  48. nur_cent="^[[:digit:]]{1,3}[[:space:]](Cent|ct|c|¢)$" # 0 Cent bis 1000 Cent
  49.  
  50. ## Gesamtausdruck aus den Unterausdrücken zusammenfügen und als Shell-Variablen abspeichern
  51. gesamt="(${euro_und_cent})|(${nur_euro})|(${nur_cent})"
  52. printf "${gesamt}\n"
  53.  
  54. ## Input anzeigen
  55. cat input_a4.txt
  56.  
  57. ## Gesamtausdruck auf Input anwenden
  58. egrep $gesamt input_a4.txt
  59.  
  60. #' ------------------------
  61. #' ------------------------
  62.  
  63. # Aufgabe 5) "RE fuer die 31 Tage des Januars (zweistelliges Format mit fuehrender Null). Zwei Varianten".
  64.  
  65. # Unterausdrucke definieren
  66. tag_zuerst="^(31|30|[012][[:digit:]])(\.)(01)$"
  67. monat_zuerst="^(01)(/)(31|30|[012][[:digit:]])$"
  68.  
  69. # Gesamtausdruck zusammenfügen
  70. gesamt="(${tag_zuerst})|(${monat_zuerst})"
  71. printf "${gesamt}\n"
  72.  
  73. # Input anzeigen
  74. cat input_a5.txt
  75.  
  76. # Gesamtausdruck auf Input anwenden
  77. egrep $gesamt input_a5.txt
  78.  
  79. #' ------------------------
  80. #' ------------------------
  81.  
  82. # Aufgabe 6) "6) RE fuer die 28 Tage des Februars (zweistelliges Format mit fuehrender Null). Zwei Varianten."
  83.  
  84. #' ------------------------
  85. #' ------------------------
  86.  
  87. # Aufgabe 5) "RE fuer die 31 Tage des Januars (zweistelliges Format mit fuehrender Null). Zwei Varianten".
  88.  
  89. #' ------------------------
  90. #' ------------------------
  91.  
  92.  
  93. # Unterausdrucke definieren
  94. tag_zuerst="^(28|27|26|25|24|23|22|21|20|[01][[:digit:]])(\.)(02)$"
  95. monat_zuerst="^(02)(/)(28|27|26|25|24|23|22|21|20|[01][[:digit:]])$"
  96.  
  97. # Gesamtausdruck zusammenfügen
  98. gesamt="(${tag_zuerst})|(${monat_zuerst})"
  99. printf "${gesamt}\n"
  100.  
  101. # Input anzeigen
  102. cat input_a6.txt
  103.  
  104. # Gesamtausdruck auf Input anwenden
  105. egrep $gesamt input_a6.txt
  106.  
  107. #' ------------------------
  108. #' ------------------------
  109.  
  110. # Aufgabe 7) RE fuer ein beliebiges Zeichen, das kein Buchstabe is
  111. cat input_a7.txt
  112. egrep "^[^[:alpha:]]$" input_a7.txt
  113.  
  114. #' ------------------------
  115. #' ------------------------
  116.  
  117.  
  118. # Aufgabe  8) RE für eine beliebige Ziffer (Drei verschiedene Varianten)
  119. cat input_a7.txt
  120. egrep "^[[:digit:]]$" input_a7.txt
  121. egrep "^[0123456789]$" input_a7.txt
  122. egrep "^[0-9]$" input_a7.txt
  123.  
  124. #' ------------------------
  125. #' ------------------------
  126.  
  127. # Aufgabe 9) "RE fuer ein Zeichen, das kein Circumflex (^) ist."
  128. cat input_a9.txt
  129. egrep "^[^^]$" input_a9.txt
  130.  
  131. #' ------------------------
  132. #' ------------------------
  133.  
  134.  
  135. # Aufgabe 10) "RE fuer eine Zeichenklasse, die nur einen Circumflex matcht.""
  136. egrep "^[\^]$" input_a9.txt
  137.  
  138. #' ------------------------
  139. #' ------------------------
  140.  
  141.  
  142. # Aufgabe 11) RE fuer ein Minus oder eine eckige Klammer.
  143. cat input_a11.txt
  144. egrep "^(-|\[|\])$" input_a11.txt
  145.  
  146. #' ------------------------
  147. #' ------------------------
  148.  
  149.  
  150. # Aufgabe 12) "RE die alles ausser einer schliessenden eckigen Klammer oder einem Circumflex matcht".
  151. cat input_a12.txt
  152. egrep "^[^]]" input_a12.txt
  153.  
  154. # Aufgabe 13) "Schreibe zwei verschiedene REs, die beide einen Backslash matchen".
  155. # Input anzeigen
  156. cat input_a13.txt
  157. ## Variante 1
  158. egrep '\\' input_a13.txt # Auf Shell sind hier anscheinend zwingend einfache (statt dopelte) Anführungszeichen notwendig (??)
  159. ## Variante 2
  160. egrep "[\]" input_a13.txt # Auf Shell sind hier anscheinend zwingend einfach Anführungszeichen notwendig
  161.  
  162. #' ------------------------
  163. #' ------------------------
  164.  
  165. # Aufgabe 14) "Was matcht die Zeichenklasse `[A-z]' ausser Buchstaben sonst noch? (Zeichensatz: US-ASCII)"
  166. #' --> Konnte diese Aufgabe  nicht lösen.
  167.  
  168. #' ------------------------
  169. #' ------------------------
  170.  
  171. # Aufgabe 15) "RE, die einen Tab matcht. Versuche mehrere Varianten zu finden."
  172.  
  173. ## Inputdatei erstellen
  174. printf "hallo du da\nhallo\tdu\tda" > input_aufgabe15.txt
  175. ## RE auf Inputdatei anwenden
  176. ### Anmerkung: Das Vorgehen (Umweg über printf), um Tabulator eingeben zu können, habe ich folgender URL entnommen: https://askubuntu.com/a/53096
  177. egrep "$(printf '\t')" input_aufgabe15.txt
  178. egrep "$(printf '[\t]')" input_aufgabe15.txt
  179.  
  180. #' ------------------------
  181. #' ------------------------
  182. #'
  183.  
  184. # Aufgabe 16) "Schreibe einen egrep-Ausdruck (nun auch mit Zeichenklassen), um die Schreibweisen Maier, Meier, Mayer, Meier und Myer zu matchen."
  185. cat input_a16.txt
  186. egrep "(^M[ae][iy]er$)|(^Myer$)" input_a16.txt
  187.  
  188. #' ------------------------
  189. #' ------------------------
  190. #' [ENDE]

Quellcode

Hier kannst du den Code kopieren und ihn in deinen bevorzugten Editor einfügen. PASTEBIN_DOWNLOAD_SNIPPET_EXPLAIN