Ergänzungskapitel 11
Ergänzungskapitel 11
Ergänzungskapitel 11
Verwandeln Sie Ihre PDFs in ePaper und steigern Sie Ihre Umsätze!
Nutzen Sie SEO-optimierte ePaper, starke Backlinks und multimediale Inhalte, um Ihre Produkte professionell zu präsentieren und Ihre Reichweite signifikant zu maximieren.
Einführung in UNIX<br />
Kapitel <strong>11</strong>
Kommando: grep<br />
• Prof. Fix hatte sich die private Telefonnummer<br />
von Jr. in seiner Notizdatei vermerkt. Wie findet<br />
er diese nun wieder?<br />
• Dazu nutzt er das Kommando grep, um sich die<br />
Zeilen auszugeben, die das Wort enthalten:<br />
– grep <br />
$: grep Tel notizen<br />
Telefonummer: 123456 7 (Jr)<br />
Telefonummer Freundlich : 22222222<br />
Tel Max:<br />
$:<br />
2
Kommando: grep<br />
• Weitere Optionen für grep:<br />
• -i Beachtung von Groß- und Kleinschreibung<br />
• -v Invertierung der Suche<br />
• -e erweiterte reguläre Ausdrücke<br />
• -r rekursive Suche in Dateibaum<br />
• -c zählt das Auftreten des Suchwortes<br />
• -n zeigt die Zeile des Suchtreffers<br />
• --color hebt die Treffer farbig hervor<br />
3
Kommando: grep<br />
• grep versteht aber auch noch eine andere<br />
"Sprache": Reguläre Ausdrücke.<br />
• So kann Prof. Fix nach etwas suchen, das wie<br />
eine Telefonnummer aussieht. Dafür hätte er<br />
den regulären Ausdruck [0-9]{4,9}<br />
nutzen können. Was das bedeutet, erfahren<br />
wir gleich.<br />
4
Reguläre Ausdrücke<br />
• Neben dem aus Kap. 8.2 bekannten<br />
Ersetzungsmechanismus (globbing) der Shell<br />
unterstützen einige UNIX-Kommandos (awk, sed,<br />
ed, find, grep,…) reguläre Ausdrücke<br />
(engl. Regular Expressions, kurz RegExp oder Regex)<br />
• Notation für die Beschreibung von Textmustern<br />
• Diverse Programmiersprachen bieten zudem<br />
Bibliotheken für die Unterstützung von regulären<br />
Ausdrücken an<br />
5
Reguläre Ausdrücke<br />
• Basieren auf der Theorie der formalen<br />
Sprachen<br />
• Für jeden regulären Ausdruck kann ein<br />
endlicher Automat konstruiert werden:<br />
a+b+<br />
<br />
a<br />
b<br />
Start<br />
A<br />
b<br />
B<br />
6
Reguläre Ausdrücke: Syntax<br />
• Gruppen: (aa)*bb<br />
• Alternative: Schmi(tt|dt|d|t)<br />
• Bereiche: [äöü], [a-z], [0-9]<br />
• Negation: [^1-9]<br />
• Escapen von Metazeichen: "img1\.jpg"<br />
• Ankerzeichen: ^ Beginn, $ Ende der Zeile<br />
^Hallo*!$<br />
7
Reguläre Ausdrücke: Syntax (2)<br />
• Wiederholungsoperator:<br />
– + 1 bis n, * 0 bis n ,? 1-mal , \{min,max\},<br />
– genau m-mal \{m\}<br />
• Klassen von Zeichen:<br />
– [:digit:], \d, Zahlen<br />
– [:alpha:], \w Buchstaben<br />
– [:lower:], Kleinbuchstaben<br />
– [:black:], \s Leerzeichen, Tab<br />
– Negierung: \D, \W, \S<br />
8
Reguläre Ausdrücke: Beispiele<br />
• Uhrzeit: [0-9]?[0-9]:[0-9]{2}<br />
01:00, 1:00 NICHT: 1:1<br />
• US-ZIP-Code: ^\d{5}(-\d{4})?$<br />
94941-3232 NICHT: 949413232<br />
• Unix-Pfadname : /^.*//<br />
/usr/fix2 NICHT: C:\\win\<br />
9
Reguläre Ausdrücke: Zu beachten<br />
• Extended vs. Normal RegExp:<br />
Extended: Metazeichen müssen nicht mit \ escaped<br />
werden<br />
• Greedy (gierig):<br />
RegExp deckt möglichst viele Zeichen ab:<br />
$:echo "hi how are you "<br />
|grep -o ".*[[:space:]]"<br />
1 Treffer: "hi how are"<br />
– Non-greedy (Perl konform):<br />
$:echo "…"|grep –oP ".*?[[:space:]]"<br />
4 Treffer: "hi" "how" "are" "you"<br />
10
Reguläre Ausdrücke: Grenzen<br />
• Wartbarkeit, Lesbarkeit und Testbarkeit?<br />
– Macht der Ausdruck genau, was er soll?<br />
• Grenzen sind reguläre Sprachen<br />
– Chomsky-Hierarchie Typ-3<br />
• Validierung, Textersetzung<br />
• Abwegen, ob der Einsatz einer Parser-Bibliothek<br />
angebracht ist? (HTML, Programmiersprachen)<br />
• Nicht besprochene Erweiterungen: Rekursion,<br />
look-ahead, look-behind …<br />
<strong>11</strong>
Frage<br />
• Welche Zeichenketten werden von diesem<br />
Ausdruck nicht erkannt:<br />
^[^[:digit:]]<br />
• A) def<br />
• B) ^1\ab<br />
• C) 007<br />
Das Muster ^[^\d] erkennt alle<br />
Zeichenketten, die nicht mit einer Zahl<br />
beginnen:<br />
A) wird erkannt<br />
B) Wird erkannt<br />
C) wird nicht erkannt<br />
12
Kommando: find<br />
• Suche rekursiv Dateien an Hand ihrer Eigenschaften im<br />
Verzeichnisbaum:<br />
– find SUCHPFAD PARAMETER<br />
• Name:<br />
– find . -name backup<br />
• Dateipfadtiefe:<br />
– find . –maxdepth 2 -name backup<br />
• Größe:<br />
– find . -size +100M<br />
• Berechtigung:<br />
– find . -perm 040<br />
14
Kommando: find (2)<br />
Anwendung eines Kommandos:<br />
• exec KOMMANDO {} \;<br />
– find . -type f -exec wc {} \;<br />
– find . -type f -name "*.bak" -exec<br />
rm -i {} \;<br />
"{}" wird pro Aufruf durch die gefundene Datei ersetzt<br />
… u. v. w. siehe: man find<br />
15
Kommando: alias<br />
• Anlegen mit alias ..='cd ..'<br />
• Löschen mit unalias name<br />
• Keine Parameterübergabe für alias möglich<br />
– $alias mkdircd='mkdir $1 ; cd $1' geht nicht!<br />
• Alternative: Funktionen können auf Parameter<br />
zugreifen ( z.B. in .bashrc anlegen):<br />
function mkdircd() {<br />
}<br />
mkdir $1; cd $1;<br />
16
Brace Expansion<br />
• Kann für die Erzeugung von Sequenzen<br />
genutzt werden:<br />
$ echo {1..5} 1 2 3 4 5<br />
$ mkdir /usr/fix/kapitel{1,2,3}<br />
• Das Inkrement kann verändert werden:<br />
$ echo {a..z..2} a c e g i k<br />
m o q s u w y<br />
17
Arithmetische Operatoren<br />
• Arithmetische Operatoren in der Shell:<br />
$(( EXPRESSION )) oder $[EXPRESSION]<br />
– $ echo $((1+2)) 3<br />
– $ echo $[1+2] 3<br />
18
Shell Debugging<br />
set -f Ersetzungsmechanismus (globbing) deaktivieren<br />
set –v Shell-Eingabe anzeigen<br />
– $ ll ; ll ; insgesamt 61476<br />
set –x Zeige Aufrufreihenfolge der Kommandos<br />
– $ ll ;+ ls --color=auto –l ;<br />
insgesamt 61476<br />
• Debugging deaktivieren: set +Parameter<br />
19
Nicht behandelte Themen<br />
• wget, curl<br />
• Md5, md5sum<br />
• debugging<br />
• i[pw]config, ping, traceroute<br />
• make<br />
• git / svn<br />
• GNU Lizenz<br />
20