22.01.2014 Aufrufe

Ergänzungskapitel 11

Ergänzungskapitel 11

Ergänzungskapitel 11

MEHR ANZEIGEN
WENIGER ANZEIGEN

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

Hurra! Ihre Datei wurde hochgeladen und ist bereit für die Veröffentlichung.

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!