• Keine Ergebnisse gefunden

– L¨osung zur Praktikumsaufgabe 4 –

N/A
N/A
Protected

Academic year: 2021

Aktie "– L¨osung zur Praktikumsaufgabe 4 –"

Copied!
2
0
0

Wird geladen.... (Jetzt Volltext ansehen)

Volltext

(1)

Betriebssysteme I

– L¨osung zur Praktikumsaufgabe 4 –

Thema: Regul¨ are Ausdr¨ ucke

1. Es ist durchaus zul¨assig, sich zun¨achst mit den im vorigen Praktikum beschriebenen Mitteln eine Textdatei anzulegen, die nur die Bibelverse (einen pro Zeile enth¨alt). Dies kann z. B. mittels

˜> cut -d ’ -f 3- bibel.txt > verse.txt

erfolgen. Eine solche Datei namens verse.txt wird f¨ur die L¨osung vorausgesetzt.

Das folgende Shellskript bietet f¨ur jede Teilaufgabe zumindest eine L¨osung:

#!/bin/bash

# a)

echo Alle dreibuchstabigen Worte:

grep -o "\<[[:alpha:]]\{3\}\>" verse.txt | sort | uniq echo Alle vierbuchstabigen Worte:

grep -o "\<[[:alpha:]]\{4\}\>" verse.txt | sort | uniq

# b)

echo -n Anzahl verschiedener Versanf¨ange:

grep -o "ˆ[[:alpha:]]\+" verse.txt | sort | uniq | wc -l

# c)

echo -n Anzahl verschiedener Substantive:

grep -o "\<[[:upper:]][[:alpha:]]*\>" verse.txt | sort | uniq | wc - -l

# d)

echo Alle Verse, die \(mindestens\) zwei L¨owen enthalten:

grep "L¨owe.*L¨owe" verse.txt

echo Alle Verse mit drei und mehr L¨owen:

grep "L¨owe.*L¨owe.*L¨owe" verse.txt

# e)

echo Das l¨angste Wort der Bibel:

grep -o "\<[[:alpha:]]\+\>" verse.txt | awk ’{print length " " $1} -

’ |

sort -n -r | uniq | head -n 1 | cut -d ’ -f 2 echo Die 40 l¨angsten Worte der Bibel:

grep -o "\<[[:alpha:]]\+\>" verse.txt | awk ’{print length " " $1} -

’ |

sort -n -r | uniq | head -n 40 | cut -d ’ -f 2 echo Die l¨angsten Nichtzahlworte der Bibel:

grep -o "\<[[:alpha:]]\+\>" bibel.txt.utf8 | awk ’{print length " -

" $1} ’ | grep -v "\(eins\)\|\(zwei\)\|\(drei\)\|\(vier\)\|\(f¨u - nf\)\|\(sechs\)\|\(sieben\)\|\(acht\)\|\(neun\)\|\(zehn\)\|\( - hundert\)\|\(tausend\)" | sort -n -r |uniq | less

# f)

echo Alle Worte, die mit ’g ’ beginnen und ’n ’ enden:

grep -o "\<[Gg][[:alpha:]]*n\>" verse.txt | sort | uniq

echo Alle Worte, die mit ’a ’ beginnen und mit ’ing ’ oder ’ung - enden:

grep -E -o "\<[Aa][[:alpha:]]*[ui]ng\>" verse.txt | sort | uniq echo Oder auch:

grep -o "\<[Aa][[:alpha:]]*\(\(ing\)\|\(ung\)\)\>" verse.txt | -

©Robert Baumgartl, 2008-20 – 1 – 20. November 2020

(2)

Betriebssysteme I

sort | uniq

Anmerkungen:

ˆ Mit head -n x <datei> gibt man die ersten x Zeilen der Datei <datei>

aus.

ˆ Das l¨angste Wort der Bibel, das keine Zahl ist, ist Hohenpriestergeschlecht auf Platz 34.

ˆ Die letzte Zeile ist ein Beispiel f¨ur einen so genannten erweiterten regul¨aren Aus- druck (er kann aber ohne weiteres durch intensives Einstreuen von Backslashes in einen basic regexp transformiert werden)!

2.

#!/bin/bash while true do

echo -e `date +%T`

sleep 1 clear done

Es tauchte im Praktikum die Frage auf, ob man auch ohne komplettes L¨oschen des Terminals auskommen kann. Die Nutzung des Steuerzeichens '\r (Carriage Return;

Wagenr¨ucklauf) in Verbindung mit echo w¨are eine Alternative:

echo -e `date +%T` \\r

Des weiteren wird gern bem¨angelt, dass die obige L¨osung keinen regul¨aren Weg der Beendigung kennt (sie muss mit Ctrl-C abgebrochen werden). In neueren Versionen der Bash gibt es allerdings in der Tat eine M¨oglichkeit: das (shell-eingebaute) Kommando readkann eine definierte Anzahl Buchstaben mit Timeout lesen (d. h., das Kommando kehrt nach einer definierten Zeitspanne zur¨uck, egal, ob der Nutzer etwas eingegeben hat oder nicht). Außerdem kann man eine Zeile sparen, indem man die Zeitausgabe innerhalb des read-Kommandos vornimmt (dann wird es aber leicht kryptisch, weil die Backticks in 2 Ebenen zum Einsatz kommen ...)

#!/bin/bash clear

while [ "$key" != "q" ] do

read -t 1 -s -n 1 -p `echo -e "\\r\`date +%T\`"` key done

echo

3. uniq -c gibt die H¨aufigkeit der gefundenen Zeilen aus.

#!/bin/bash

cut -f1 -d ’ ˜/.bash_history | sort| uniq -c | sort -n -r |less

©Robert Baumgartl, 2008-20 – 2 – 20. November 2020

Referenzen

ÄHNLICHE DOKUMENTE

[r]

Zeigen Sie dann unter Verwendung von Aufgabe 10.4, dass Φ(N ) eine Lebesgue- Nullmenge ist. Abgabetermin:

Dort liegt im doc- Verzeichnis das Tutorial tutorial.pdf, das beschreibt, wie eine komplexe Geometrie (Flasche mit Ge- winde) mit dem CAD-Kernel modelliert werden kann.. Zun¨achst

echo -n Es gibt ` grep -o Schlange bibel.txt | wc -l ` \ echo -n Schlangen, ` grep -o Maus bibel.txt | wc -l ` \ echo -n M¨ ause und ` grep -o L¨ owe bibel.txt | wc -l ` \ echo L¨

ˆ Kleinschreibung ist Standard bei Variablenbezeichnern, um sie von Umgebungs- variablen, die in Großbuchstaben notiert werden, zu unterscheiden.. Dies ist eine Konvention,

Die Syntax regul¨ arer Ausdr¨ ucke differiert u. gibt es Basic und Extended Regular Expressions), das Funktionsprinzip ist jedoch identisch..

&amp; }; func ist dies nicht der Fall; es wird f¨ ur pro Aufruf genau eine Shell ge- startet; die Rate der neugestarteten entspricht der Rate der beendeten Shells (, was sich mit

Handelt es sich um keinen numerischen Parameter (also eine Zeichenkette), dann schreibt die Bash eine Fehlermeldung nach stderr, die entsprechend nach /dev/null geleitet werden