Linux II 2 Linux II Reguläre Ausdrücke Editoren Scripting
POSIX POSIX POSIX ist ein UNIX-Standard, der bestimmte grundlegende Funktionen und Eigenschaften von UNIX-Systemen definiert. Dazu gehören auch reguläre Ausdrücke, die in einer Vielzahl von Kommandozeilentools verwendet werden können bzw. müssen. /regulärer Ausdruck/ Reguläre Ausdrücke Reguläre Ausdrücke beschreiben eine Menge von Zeichenfolgen und werden benutzt um m festzustellen, ob eine Zeichenkette Teil dieser Menge ist. Der Ausdruck matcht dann auf die Zeichenkette.
Aufbau I Abgesehen von Meta Characters matcht jedes Zeichen aus dem regulären Ausdruck genau auf sich selbst. Example /abcd/ matcht auf die Zeichenfolge abcd Meta Characters haben eine besondere Bedeutung und werden benutzt, um Gruppen zu bilden, Alternativen darzustellen oder auf mehr als ein Zeichen zu matchen.
Aufbau II Meta Characters. Ein beliebiges Zeichen [ ] Matcht alle einzelnen Zeichen innerhalb der Klammern, des Bereichs oder der Zeichenklasse [ˆ ] Matcht auf alle Zeichen, die nicht innerhalb der Klammern stehen ˆ Anfang der Zeichenkette $ Ende der Zeichenkette * Matcht das vorherige Zeichen 0 oder mehr Male + Matcht das vorherige Zeichen 1 oder mehr Male? Matcht das vorherige Zeichen 0 oder 1 Mal
Aufbau III Beispiele /Maus/ matcht auf Maus /.aus/ matcht auf Maus, Haus, maus, 1aus,... /.*aus/ matcht auf Maus, heraus, 123aus, aus,... /[MH]aus/ matcht auf Maus, Haus, Haus1,... /^[MH]aus$/ matcht auf Maus und Haus /^[^MH]aus$/ matcht auf Laus, Daus, raus,... /^A(p ff)e$/ matcht auf Affe und Ape
Benutzung von regulären Ausdrücken Tools, in denen reguläre Ausdrücke benutzt werden können grep / egrep sed emacs perl...
Charakterklassen Zur einfacheren Handhabung gibt es sogennante Charakterklassen. Jede Charakterklasse matcht auf eine Menge von Zeichen. Übliche Klassen [:alnum:] [a-za-z0-9] [:alpha:] [a-za-z] [:digit:] Digits [:lower:] [a-z] [:punct:] Punctuation and Symbols [:space:] [ \t\r\n\v\f] [:word:] [a-za-z0-9 ]
Backreferences In Klammern ( ) gesetzte Zeichen sind als Backreferences verfügbar. Damit kann auf bereits gefundene Teile verwiesen werden Beispiele /^(.)\1/ Matcht Zeichenketten, die mit zwei beliebigen, aber gleichen Zeichen anfangen: aal, iih,...
Ersetzung I Reguläre Ausdrücke können auch benutzt werden um Ersetzungsregeln für sed zu definieren. Beispiel $ sed s/groß/klein/g file.txt Ersetzt jede Zeichenfolge groß durch die Zeichenfolge klein Aufbau s/<a>/<b>/ Ersetzungsausdrücke (in sed und perl): <a> wird durch <b> ersetzt g Modifikator: Globales Matching i Modifikator: Case insensitive s Modifikator:. matcht auch auf Zeilenumbrüche
Ersetzung II Beispiele $ sed s/[[:space:]]/\n/g file.txt Ersetzt jedes space-zeichen durch einen Zeilenumbruch. Jedes Wort steht dann auf einer eigenen Zeile $ sed s/([[:space:]])[[:punct:]]/\1/g Ersetzt Space gefolgt von Punctuation-Zeichen durch Space. Entfernt z.b. öffnende Anführungszeichen. $ sed s/([[:lower:]])([[:upper:]])/\1 \2/g Ersetzt CamelCase-Ausdrücke durch Camel Case
Übung 3
(Einige) Lösungen 3c $ egrep -ic "(gott götter)" zara.txt 3f $ egrep -oi "([[:space:]] [[:punct:]])[[:alnum:]-]* (mensch gott götter)[[:alnum:]-]* ([[:punct:][:space:]])" zara.txt Beispiel (Verteilung Gott ) 92 Gott 24 Gottes 18 Götter 8 Gotte
Editoren Text-Editoren werden benutzt um Textdateien zu schreiben bzw. zu ändern. Textdateien bezeichnet dabei nur das Format nicht den Inhalt. Praktisch alle Programmiersprachen benutzen Text-Dateien um den Quellcode zu speichern. Unter Unix/Linux gibt es zwei wichtige Editoren, die man beide kennen sollte: Emacs und vi. Welchen man dann regelmäßig benutzt ist weitestgehend Geschmackssache. Diese Folien z.b. wurden in Emacs getippt. Wir werden ganz kurz über vi reden und dann etwas länger über Emacs.
vi Befehlsmodus: Tastenkombinationen ermöglichen einfache Befehle wie Suchen, Zeile löschen etc. Einfügemodus: Eigentliche Eingabe von Text Kommandozeilenmodus: Komplexe Befehle vi beenden: :wq Tutorial: http://www.eng.hawaii.edu/tutor/vi.html
Emacs I Emacs kennt keine Modi, sondern eine Unmenge von Tastenkombinationen Dabei gibt es zwei Sondertasten: Command und Meta (C bzw. M). Command ist meistens Ctrl und Meta Alt oder Escape (das variiert von Betriebssystem zu Betriebssystem) Emacs gibt es auch mit einer GUI, wo man sich durch Menüs klicken kann
Emacs II Wichtige Tastenkürzel C-x C-c Beenden C-x C-s Speichern C-x C-w Speichern unter C-x C-f Datei öffnen M-x Befehlszeile C- Rückgängig C-s Vorwärts suchen C-r Rückwärts suchen C-a Anfang der Zeile C-e Ende der Zeile C-k Ausschneiden bis Zeilenende C-y Einfügen
Emacs III Nützliche Kommandos für die Befehlszeile goto-line Springe zu Zeile shell Öffnet ein Terminal X-mode Wechselt in Modus X Links http://www.emacswiki.org http://www.gnu.org/software/emacs/manual
demo
Variablen In der Shell können Variablen verwendet werden. Beispiel $ TEST=filename $ echo $TEST filename $ echo $TEST.txt filename.txt $ echo../$test.txt../filename.txt $ echo $TEST2 $ echo ${TEST}2 filename2
Quoting I Beispiele $ TEST="A B" $ echo "$TEST" A B $ echo '$TEST' $TEST $ TEST="A B" $ echo $TEST A B $ echo "$TEST" A B
Quoting II Beispiele (``) $ TEST=`ls -la` $ echo $TEST...output of ls -la...
Spezielle Variablen $HOME Der Pfad zum Homeverzeichnis $PWD Working Directory $OLDPWD Previous Working Directory $ Letztes Argument des letzten Kommandos
Variablen in Subprozessen Standardvariablen sind in Subprozessen nicht belegt. Beispiel $ VAR=hallo $ bash -c echo VAR=$VAR VAR= Umgebungsvariablen, die mit export deklariert werden, sind in Subprozessen verfügbar. Beispiel $ export VAR=hallo $ bash -c echo VAR=$VAR VAR=hallo
Scripting I Bisher haben wir Shell-Kommandos direkt eingegeben, auf das Ergebnis gewartet und ein neues eingegeben. Shell-Kommandos können auch in Programmen verwendet werden, sog. Shell-Scripts. $ less /home/public/filter.sh #!/bin/bash for word in "$@" do if! grep -q "^${word}$" stop.txt then echo $word fi done
Scripting II Variablen in Skripten $0, $1, $2,... Parameter von der Kommandozeile $# Anzahl der Parameter $@ Liste aller Parameter Kontrollstrukturen Vier wichtige Kontrollstrukturen: for, while, until, if Beispiele. Das war nur eine sehr kurze Einführung. Sehr viel lesen können (und sollen) Sie z. B. hier: http://tldp.org/ldp/abs/html/index.html.
demo
Übung 4