NoPaste

RegExp-Kurs_06.sh

von tegula
SNIPPET_DESC:
Bitte Dateinahmensendung ".txt" entfernen.
SNIPPET_CREATION_TIME:
24.05.2022 14:03:43
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: "22 05 2022"
  7. #' output: html_document
  8. #' ---
  9.  
  10. #' ------------------------
  11. #' ------------------------
  12.  
  13. #' **Kurs-Teil:** 06 -  Punkt, Quantoren.
  14. #' **URL:** https://debianforum.de/forum/viewtopic.php?t=184230
  15.  
  16. #' ------------------------
  17. #' ------------------------
  18.  
  19. # Aufgabe 1: "Matche mit einer RE allen Input".
  20. egrep --line-number "." schwaebische-kunde.txt
  21.  
  22. #' ------------------------
  23. #' ------------------------
  24.  
  25. # Aufgabe 2: "Extrahiere mit `egrep -o' alle Zahlen aus einem Text".
  26. ## Eingabetext anzeigen
  27. cat -n a2.txt
  28. ## Zahlen mit 'egrep -o' extrahieren (sowohl Komma und Punkt als Dezimal- und/oder Tausender-Trenner erlaubt)
  29. egrep -o "[[:digit:]]+[.,]*[[:digit:]]*" a2.txt
  30.  
  31. #' ------------------------
  32. #' ------------------------
  33.  
  34. # Aufgabe 3: "Matche in einem XML-Input mit einer RE (ohne Alternation) die Beginn- und Ende-Tags `<h1>' und `</h1>'".
  35.  
  36. ## Input herunterladen
  37. wget -O "Forum_RegEx-Kurs_Teil_06.html" https://debianforum.de/forum/viewtopic.php?p=1302386
  38.  
  39. ## Nur Tags, ohne eingeschlossenen Text)
  40. egrep -o --line-number "</?h1>" Forum_RegEx-Kurs_Teil_06.html
  41.  
  42. ## Ausgabe: Tags, einschließlich dem eingeschlossenen Text
  43. egrep -o --line-number "(<h1>)+(.)*(</h1>)+" Forum_RegEx-Kurs_Teil_06.html
  44.  
  45. #' ------------------------
  46. #' ------------------------
  47.  
  48. # Aufgabe 4) "Schreibe die entsprechenden Intervallausdruecke fuer die drei anderen Quantoren: * + ?"
  49. ## Eingabe anzeigen
  50. cat -n a4.txt
  51.  
  52. ## "*" (beliebige Zahl an Wiederholungen, auch 0 Wiederholungen möglich)
  53. egrep -o --line-number "(.)a{,}" a4.txt
  54. egrep -o --line-number "(.)a*" a4.txt # Kontrolle mit Sternchen-Operator
  55.  
  56. ## "+" (mindestens eine Wiederholung)
  57. egrep -o ".(a{1,})" a4.txt
  58. egrep -o --line-number "(.)a+" a4.txt # Kontrolle mit plus-Operator
  59.  
  60. ## "?" (vorheriges Zeichen darf einmalig vorkommen, muss aber nicht vorkommen)
  61. egrep -o --line-number "(.)a{0,1}" a4.txt
  62. egrep -o --line-number "(.)a?" a4.txt # Kontrolle mit Fragezeichen-Operator
  63.  
  64. #' ------------------------
  65. #' ------------------------
  66.  
  67. # Aufgabe 5) "Erklaere die RE: `**'. Auf was wird sie matchen"?
  68.  
  69. ## eigentlicher Ausdruck aus Aufgabe
  70. egrep --line-number "**" schwaebische-kunde.txt
  71.  
  72. ## zusätzliche Klammern ergänzen, um das Lesen des Ausdrucks zu vereinfach ()
  73. egrep --line-number "()*()*" schwaebische-kunde.txt
  74.  
  75. #' **Antwort:** Sie wird auf jedes Zeichenfolge (das heißt in diesem Fall: Auf jede Zeile der Datei) matchen, da die Aussage "Die Zeilenfolge besteht aus mindestens 0 Wiederholungen und maximal unendlich vielen Wiederholungen von 'keinem Zeichen' (), gefolgt von (erneut) mindestens 0 Wiederholungen und maximal unendlich vielen Wiederholungen von 'keinem Zeichen' ()" scheinbar (?) für jede Zeichenfolge gilt.
  76.  
  77. #' ------------------------
  78. #' ------------------------
  79.  
  80. # Aufgabe 6) "``Bananen?'' -- Dies ist keine Frage, sondern?"
  81. cat -n a6.txt
  82. egrep -o --line-number "Bananen?" a6.txt
  83.  
  84. #' **Antwort:** ... ein RE, der sowohl auf "Banane" als auch auf "Bananen" matcht
  85.  
  86. #' ------------------------
  87. #' ------------------------
  88.  
  89. # Aufgabe 7) "Matche alles bis ``ENDE'' (inklusive)".
  90. ## Eingabetext anzeigen
  91. cat -n a7.txt
  92. ## bis zum _letzten_ 'ENDE' jeder Zeile
  93. egrep -o --line-number "(.)*(ENDE){1}" a7.txt
  94. ## bis zum _letzten_ 'ENDE' in jener Zeile, in der das Wort 'ENDE' zum ersten mal auftritt
  95. egrep -o --max-count 1 --line-number "(.)*(ENDE){1}" a7.txt
  96. ## bis zum _ersten_ 'ENDE' der jeder Zeile
  97. ### --> Habe hierfür leider keine Lösung herausgefinden können.
  98. ## bis zum _allerersten_ 'ENDE' des Textes
  99. ### --> Habe hierfür leider keine Lösung herausgefinden können.
  100.  
  101. #' ------------------------
  102. #' ------------------------
  103.  
  104. # Aufgabe 8 "Matche den Inhalt eines Single-Quoted Strings (dieser kann das Single-Quote nicht enthalten)."
  105. ## Gesamter Zeichenkette (einschließlich des Single-Quoted-String) definiernen und in einer Datei abspeichern
  106. printf "Das Folgende ist ein 'Single-Quoted String'. Danach ist es wieder ein normaler String" > a8_input.txt
  107. printf "\n"
  108. ## Reguläre Ausdruck definieren und in eine Datei abspeichern
  109. printf "(')(.)*(')" > a8_regex.txt
  110. printf "\n"
  111. ## Abgespeicherten regulären Ausdruck auf abspeicherte Zeichenkette anwenden
  112. egrep -o -f a8_regex.txt a8_input.txt
  113.  
  114. #' ------------------------
  115. #' ------------------------
  116.  
  117. # Aufgabe 9 "Matche einen Satz, d.h. von einem Grossbuchstaben bis zum naechsten Satzendezeichen. (Zweimal drueber nachdenken und testen. Der erste Ansatz ist nicht unbedingt ausreichend!)".
  118.  
  119. ## Satz anzeigen
  120. cat a9.txt
  121.  
  122. ## egrep ausführen bzw. RE anwenden
  123. ### **Anmerkung (1):** Einzelne Anführungszeichen sind hier scheinbar (?) notwendig, weil die Shell sonst eine Fehlermeldung ausgibt ("[...] event not found")
  124. egrep -o '[[:upper:]][^?.!:]*([?.!:])' a9.txt
  125.  
  126. #' ------------------------
  127. #' ------------------------
  128.  
  129. # Aufgabe 10: "Matche grosse Geldwerte mit Tausendertrenner."
  130. ## Eingabe anzeigen
  131. cat a10.txt
  132. ## egrep ausführen bzw. RE anwenden
  133. egrep -o --line-number "([[:digit:]]|,)*([.][[:digit:]]{3,3})(,[[:digit:]]{2})?([[:blank:]])?(Euro|€)*" a10.txt
  134.  
  135. #' ------------------------
  136. #' ------------------------
  137.  
  138. # Aufgabe 11: "Finde ein sinnhaftes Praxisbeispiel fuer eine RE mit Punkt aber ohne Quantoren."
  139.  
  140. #' **ANTWORT bzw. Beispiel;** Kontrollieren, ob eine gewählte Abkürzung eine eine Länge von von genau drei Zeichen einhält.
  141.  
  142. ## Eingabe anzeigen
  143. cat a11.txt
  144.  
  145. # egrep ausführen bzw. RE anwenden
  146. egrep -o --line-number "^(...)$" a11.txt
  147.  
  148. #' ------------------------
  149. #' ------------------------
  150.  

Quellcode

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