NoPaste

Ausgabe_RegExp-Kurs_05

von tegula

SNIPPET_TEXT:
  1. $ #' ---
  2. $ #' title: "Lösungsversuch zum RegEXP-Kurs im Debianforum"
  3. $ #' author: "tegula"
  4. $ #' date: " 10 05 2022"
  5. $ #' output: html_document
  6. $ #' ---
  7. $
  8. $
  9. $ #' ------------------------
  10. $ #' ------------------------
  11. $ #' **Kurs-Teil:** 05 -  Zeichenklassen
  12. $ #' **URL:** https://debianforum.de/forum/viewtopic.php?p=1301642#p1301642
  13. $
  14. $ #' ------------------------
  15. $ #' ------------------------
  16. $
  17. $ # Aufgabe 1: "Re für eine Hexadezimalziffer""
  18. $ cat input_a1.txt
  19. 0
  20. A
  21. 7
  22. B
  23. 9
  24. F
  25. Z
  26. Y
  27. D
  28. $ egrep "[[:xdigit:]]" input_a1.txt
  29. 0
  30. A
  31. 7
  32. B
  33. 9
  34. F
  35. D
  36. $
  37. $ #' ------------------------
  38. $ #' ------------------------
  39. $
  40. $ # Aufgabe 2: RE fuer eine dreistellige Ganzzahl
  41. $ cat input_a2.txt
  42. 197
  43. 2022
  44. 55
  45. 44.3
  46. 44,3
  47. hallo
  48. 2
  49. 999
  50. 1000
  51. $ ## Muster (für eine dreistellige Zahl muss folgendes sein: Anfang der Zeichenkette "^", dreimal hintereinander Dezimalziffer ("[[:digit:]]{3,3}, Ende der Zeichenkette ("$")
  52. $ egrep "^[[:digit:]]{3,3}$"  input_a2.txt
  53. 197
  54. 999
  55. $
  56. $ #' ------------------------
  57. $ #' ------------------------
  58. $
  59. $ # Aufgabe 3: "RE fuer eine dreistellige Ganzzahl mit (Pflicht-)Vorzeichen".
  60. $ cat input_a3.txt
  61. 700
  62. -hallo
  63. -311
  64. +12
  65. +1000
  66. +128
  67. $ egrep "^(\+|-)[[:digit:]]{3,3}$" input_a3.txt
  68. -311
  69. +128
  70. $
  71. $ #' ------------------------
  72. $ #' ------------------------
  73. $
  74. $
  75. $ # Aufgabe 4: "RE fuer einen Euro-und-Cent-Betrag kleiner 10,- [Euro]"
  76. $
  77. $ ## Unterausdrücke definieren und als Shell-Variablen abspeichern
  78. $ euro_und_cent="^[[:digit:]]{1,1},[[:digit:]]{2,2}[[:space:]](Euro|€)$" # 0,00 Euro bis 10,00 Euro
  79. $ nur_euro="^[[:digit:]]{1,1}[[:space:]](Euro|€)$" # 0 Euro bis 10 Euro
  80. --$ nur_cent="^[[:digit:]]{1,3}[[:space:]](Cent|ct|c|¢)$" # 0 Cent bis 1000 Cent
  81. $
  82. $ ## Gesamtausdruck aus den Unterausdrücken zusammenfügen und als Shell-Variablen abspeichern
  83. $ gesamt="(${euro_und_cent})|(${nur_euro})|(${nur_cent})"
  84. $ printf "${gesamt}\n"
  85. (^[[:digit:]]{1,1},[[:digit:]]{2,2}[[:space:]](Euro|€)$)|(^[[:digit:]]{1,1}[[:space:]](Euro|€)$)|(^[[:digit:]]{1,3}[[:space:]](Cent|ct|c|¢)$)
  86. $
  87. $ ## Input anzeigen
  88. $ cat input_a4.txt
  89. 3,35 Euro
  90. 7 Euro
  91. 22,66 Euro
  92. 5,00 Dollar
  93. 0,10 €
  94. 555 €
  95. 10 Cent
  96. 99 ct
  97. $
  98. $ ## Gesamtausdruck auf Input anwenden
  99. $ egrep $gesamt input_a4.txt
  100. 3,35 Euro
  101. 7 Euro
  102. 0,10 €
  103. 10 Cent
  104. 99 ct
  105. $
  106. $ #' ------------------------
  107. $ #' ------------------------
  108. $
  109. $ # Aufgabe 5) "RE fuer die 31 Tage des Januars (zweistelliges Format mit fuehrender Null). Zwei Varianten".
  110. $
  111. $ # Unterausdrucke definieren
  112. $ tag_zuerst="^(31|30|[012][[:digit:]])(\.)(01)$"
  113. $ monat_zuerst="^(01)(/)(31|30|[012][[:digit:]])$"
  114. $
  115. $ # Gesamtausdruck zusammenfügen
  116. $ gesamt="(${tag_zuerst})|(${monat_zuerst})"
  117. $ printf "${gesamt}\n"
  118. (^(31|30|[012][[:digit:]])(\.)(01)$)|(^(01)(/)(31|30|[012][[:digit:]])$)
  119. $
  120. $ # Input anzeigen
  121. $ cat input_a5.txt
  122. 31.12
  123. 31.01
  124. 05.01
  125. 06.01
  126. 40.01
  127. 01/12
  128. 01/33
  129. 04/08
  130. 01/30
  131. $
  132. $ # Gesamtausdruck auf Input anwenden
  133. $ egrep $gesamt input_a5.txt
  134. 31.01
  135. 05.01
  136. 06.01
  137. 01/12
  138. 01/30
  139. $
  140. $ #' ------------------------
  141. $ #' ------------------------
  142. $
  143. $ # Aufgabe 6) "6) RE fuer die 28 Tage des Februars (zweistelliges Format mit fuehrender Null). Zwei Varianten."
  144. $
  145. $ #' ------------------------
  146. $ #' ------------------------
  147. $
  148. $ # Aufgabe 5) "RE fuer die 31 Tage des Januars (zweistelliges Format mit fuehrender Null). Zwei Varianten".
  149. $
  150. $ #' ------------------------
  151. $ #' ------------------------
  152. $
  153. $
  154. $ # Unterausdrucke definieren
  155. $ tag_zuerst="^(28|27|26|25|24|23|22|21|20|[01][[:digit:]])(\.)(02)$"
  156. $ monat_zuerst="^(02)(/)(28|27|26|25|24|23|22|21|20|[01][[:digit:]])$"
  157. $
  158. $ # Gesamtausdruck zusammenfügen
  159. $ gesamt="(${tag_zuerst})|(${monat_zuerst})"
  160. $ printf "${gesamt}\n"
  161. (^(28|27|26|25|24|23|22|21|20|[01][[:digit:]])(\.)(02)$)|(^(02)(/)(28|27|26|25|24|23|22|21|20|[01][[:digit:]])$)
  162. $
  163. $ # Input anzeigen
  164. $ cat input_a6.txt
  165. 01.02
  166. 28.02
  167. 30.02
  168. 28.07
  169. 02/09
  170. 29/02
  171. 02/11
  172. $
  173. $ # Gesamtausdruck auf Input anwenden
  174. $ egrep $gesamt input_a6.txt
  175. 01.02
  176. 28.02
  177. 02/09
  178. 02/11
  179. $
  180. $ #' ------------------------
  181. $ #' ------------------------
  182. $
  183. $ # Aufgabe 7) RE fuer ein beliebiges Zeichen, das kein Buchstabe is
  184. $ cat input_a7.txt
  185. 7
  186. 45
  187. A
  188. (
  189. H
  190. X
  191. ?
  192. Z
  193. -
  194. +
  195. 0
  196. 1
  197. $ egrep "^[^[:alpha:]]$" input_a7.txt
  198. 7
  199. (
  200. ?
  201. -
  202. +
  203. 0
  204. 1
  205. $
  206. $ #' ------------------------
  207. $ #' ------------------------
  208. $
  209. $
  210. $ # Aufgabe  8) RE für eine beliebige Ziffer (Drei verschiedene Varianten)
  211. $ cat input_a7.txt
  212. 7
  213. 45
  214. A
  215. (
  216. H
  217. X
  218. ?
  219. Z
  220. -
  221. +
  222. 0
  223. 1
  224. $ egrep "^[[:digit:]]$" input_a7.txt
  225. 7
  226. 0
  227. 1
  228. $ egrep "^[0123456789]$" input_a7.txt
  229. 7
  230. 0
  231. 1
  232. $ egrep "^[0-9]$" input_a7.txt
  233. 7
  234. 0
  235. 1
  236. $
  237. $ #' ------------------------
  238. $ #' ------------------------
  239. $
  240. $ # Aufgabe 9) "RE fuer ein Zeichen, das kein Circumflex (^) ist."
  241. $ cat input_a9.txt
  242. a
  243. ^
  244. ?
  245. Mehrere_Zeichen
  246. B
  247. $ egrep "^[^^]$" input_a9.txt
  248. a
  249. ?
  250. B
  251. $
  252. $ #' ------------------------
  253. $ #' ------------------------
  254. $
  255. $
  256. $ # Aufgabe 10) "RE fuer eine Zeichenklasse, die nur einen Circumflex matcht.""
  257. $ egrep "^[\^]$" input_a9.txt
  258. ^
  259. $
  260. $ #' ------------------------
  261. $ #' ------------------------
  262. $
  263. $
  264. $ # Aufgabe 11) RE fuer ein Minus oder eine eckige Klammer.
  265. $ cat input_a11.txt
  266. -
  267. +
  268. a
  269. 9
  270. [
  271. ]
  272. /
  273. $ egrep "^(-|\[|\])$" input_a11.txt
  274. -
  275. [
  276. ]
  277. $
  278. $ #' ------------------------
  279. $ #' ------------------------
  280. $
  281. $
  282. $ # Aufgabe 12) "RE die alles ausser einer schliessenden eckigen Klammer oder einem Circumflex matcht".
  283. $ cat input_a12.txt
  284. ]
  285. [
  286. ^
  287. a
  288. 7
  289. $ egrep "^[^]]" input_a12.txt
  290. [
  291. ^
  292. a
  293. 7
  294. $
  295. $ # Aufgabe 13) "Schreibe zwei verschiedene REs, die beide einen Backslash matchen".
  296. $ # Input anzeigen
  297. $ cat input_a13.txt
  298. \
  299. /
  300. A
  301. z
  302. 9
  303. $ ## Variante 1
  304. $ egrep '\\' input_a13.txt # Auf Shell sind hier anscheinend zwingend einfache (statt dopelte) Anführungszeichen notwendig (??)
  305. \
  306. $ ## Variante 2
  307. $ egrep "[\]" input_a13.txt # Auf Shell sind hier anscheinend zwingend einfach Anführungszeichen notwendig
  308. \
  309. $
  310. $ #' ------------------------
  311. $ #' ------------------------
  312. $
  313. $ # Aufgabe 14) "Was matcht die Zeichenklasse `[A-z]' ausser Buchstaben sonst noch? (Zeichensatz: US-ASCII)"
  314. $ #' --> Konnte diese Aufgabe  nicht lösen.
  315. $
  316. $ #' ------------------------
  317. $ #' ------------------------
  318. $
  319. $ # Aufgabe 15) "RE, die einen Tab matcht. Versuche mehrere Varianten zu finden."
  320. $
  321. $ ## Inputdatei erstellen
  322. $ printf "hallo du da\nhallo\tdu\tda" > input_aufgabe15.txt
  323. $ ## RE auf Inputdatei anwenden
  324. $ ### Anmerkung: Das Vorgehen (Umweg über printf), um Tabulator eingeben zu können, habe ich folgender URL entnommen: https://askubuntu.com/a/53096
  325. $ egrep "$(printf '\t')" input_aufgabe15.txt
  326. hallo   du      da
  327. $ egrep "$(printf '[\t]')" input_aufgabe15.txt
  328. hallo   du      da
  329. $
  330. $ #' ------------------------
  331. $ #' ------------------------
  332. $ #'
  333. $
  334. $ # Aufgabe 16) "Schreibe einen egrep-Ausdruck (nun auch mit Zeichenklassen), um die Schreibweisen Maier, Meier, Mayer, Meier und Myer zu matchen."
  335. $ cat input_a16.txt
  336. Maier
  337. Meier
  338. Mayer
  339. Meier
  340. Myer
  341. Müller
  342. Maiar
  343. $ egrep "(^M[ae][iy]er$)|(^Myer$)" input_a16.txt
  344. Maier
  345. Meier
  346. Mayer
  347. Meier
  348. Myer
  349. $
  350. $ #' ------------------------
  351. $ #' ------------------------
  352. $ #' [ENDE]
  353. $
  354.  

Quellcode

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