Suchen in Files mittels Grep

Ähnliche Dokumente
Das Kommando zum suchen nach Files unter bestimmten Kriterien Häufigste Verwendung:

X Anmelden am System. X System herunterfahren. X Grundlegendes zur Shell. X Das Hilfesystem. X Dateioperationen. X Bewegen im Verzeichnisbaum

Skripte. Beispiel. M. Fyta Computergrundlagen 73/93

1. Aliases. Shells: Was passiert mit einem Kommando? 2. Variablen. Shell durchläuft folgenden Zyklus: Ersatz für häufige / längliche Kommandos

Shells: Was passiert mit einem Kommando?

Übung 4: Schreiben eines Shell-Skripts

Übung: Entwickeln eines Shell-Skripts

ATB Ausbildung Technische Berufe Ausbildungszentrum Klybeck

L A TEX, Linux, Python

Gibt Daten im erweiterten Format aus. Dies beinhaltet die Angabe von Zugriffsrechten, Besitzer, Länge, Zeitpunkt der letzten Änderung und mehr.

Der zweite all unsere Datenbanken. Dieser Befehl ist etwas komplexer, aber bis auf das Passwort (kursiv fett) so zu übernehmen:

1) JAVA JRE auf der QNAP Box installieren

Linux Prinzipien und Programmierung

Dateisystem 2, Suchen & Finden, Manpages

Aufgabensammlung IT Shellprogrammierung Teil I

Arge Betriebsinformatik GmbH & Co.KG, CAP News 40, Februar CAP-News 40

Leichte-Sprache-Bilder

AGROPLUS Buchhaltung. Daten-Server und Sicherheitskopie. Version vom b

Oft feinere / flexiblere Regelung der Zugriffsrechte gewünscht ACLs = access control lists Features:

Oft feinere / flexiblere Regelung der Zugriffsrechte gewünscht ACLs = access control lists Features:

OP-LOG

Luis Kornblueh. May 22, 2014

Wiederholung und Vertiefung. Programmieren in C. Pointer und so... thoto. /dev/tal e.v. 6. April 2013 (Version vom 11. April 2013) Programmieren in C

Shells: Was passiert mit einem Kommando? Prozeßkontrolle. Aliases. Variable. Wichtige Environment-Variablen. Shell durchläuft folgenden Zyklus:

Eprog Starthilfe. 5. Oktober Einleitung 2

Motivation. Formale Grundlagen der Informatik 1 Kapitel 5 Kontextfreie Sprachen. Informales Beispiel. Informales Beispiel.

Lineargleichungssysteme: Additions-/ Subtraktionsverfahren

Informatik I Tutorial

Windows. Workshop Internet-Explorer: Arbeiten mit Favoriten, Teil 1

Linux II. Reguläre Ausdrücke Editoren Scripting. 2 Linux II. Linux I II III Res WN/TT NLTK XML Weka E Reguläre Ausdrücke Editoren Scripting

Menü Macro. WinIBW2-Macros unter Windows7? Macros aufnehmen

L10N-Manager 3. Netzwerktreffen der Hochschulübersetzer/i nnen Mannheim 10. Mai 2016

Werkzeuge der Informatik UNIX

Virtuelle COM-Schnittstelle umbenennen

MailUtilities: Remote Deployment - Einführung

cs106 Informatiklabor Teil 1: Java-Installation

1 Vom Problem zum Programm

Binäre Bäume. 1. Allgemeines. 2. Funktionsweise. 2.1 Eintragen

Shell. Oder Konsole suchen im Application Finder. Auch Terminal, Bash oder Kommandozeile genannt. Bash nimmt Befehle entgegen und führt diese aus

trivum Multiroom System Konfigurations- Anleitung Erstellen eines RS232 Protokolls am Bespiel eines Marantz SR7005

DER WING COMMANDER CD³² GUIDE

Dateien und Verzeichnisse

Erweiterung der Aufgabe. Die Notenberechnung soll nicht nur für einen Schüler, sondern für bis zu 35 Schüler gehen:

mysql - Clients MySQL - Abfragen eine serverbasierenden Datenbank

Professionelle Seminare im Bereich MS-Office

AutoTexte und AutoKorrektur unter Outlook verwenden

Stellen Sie bitte den Cursor in die Spalte B2 und rufen die Funktion Sverweis auf. Es öffnet sich folgendes Dialogfenster

Stapelverarbeitung Teil 1

Handbuch Fischertechnik-Einzelteiltabelle V3.7.3

Objektorientiertes Programmieren mit Suse Linux

Speichern. Speichern unter

Informatik 1 Tutorial

C++ mit Eclipse & GCC unter Windows

Was ich als Bürgermeister für Lübbecke tun möchte

! " # $ " % & Nicki Wruck worldwidewruck

SelfLinux cron

Bedienungsanleitung Einsatzplanung. Bedienungsanleitung Einsatzplanung. Inhalt. Bedienung einer Plan-Tabelle

Zwischenablage (Bilder, Texte,...)

Verwendung des IDS Backup Systems unter Windows 2000

Die Beschreibung bezieht sich auf die Version Dreamweaver 4.0. In der Version MX ist die Sitedefinition leicht geändert worden.

Erstellen von x-y-diagrammen in OpenOffice.calc

Sie wollen Was heißt das? Grundvoraussetzung ist ein Bild oder mehrere Bilder vom Wechseldatenträger

Ich möchte eine Bildergalerie ins Internet stellen

Tutorial Speichern. Jacqueline Roos - Riedstrasse 14, 8908 Hedingen, jroos@hispeed.ch -

Einführung in LINUX Der Editor vi

DYNAMISCHE SEITEN. Warum Scriptsprachen? Stand: CF Carola Fichtner Web-Consulting

Outlook. sysplus.ch outlook - mail-grundlagen Seite 1/8. Mail-Grundlagen. Posteingang

Artikel Schnittstelle über CSV

Mediator 9 - Lernprogramm

Snippets - das Erstellen von "Code- Fragmenten" - 1

Grundbegriffe der Informatik

-Versand an Galileo Kundenstamm. Galileo / Outlook

Dienstleistungen Zentrum Medienbildung. Anleitung für das Überspielen von Videomaterial einer SD- und HDD-Kamera via USB

Viele Bilder auf der FA-Homepage

Wordpress: Blogbeiträge richtig löschen, archivieren und weiterleiten

Persönliches Adressbuch

Schrittweise Anleitung zur Erstellung einer Angebotseite 1. In Ihrem Dashboard klicken Sie auf Neu anlegen, um eine neue Seite zu erstellen.

NEUES BEI BUSINESSLINE WINDOWS

Menü auf zwei Module verteilt (Joomla 3.4.0)

Installationsanleitungen

Geben Sie in dem offenen Suchfeld den Namen Ihrer Einrichtung ein und klicken Sie auf Suchen.

Anleitung zum Einrichten eines -Accounts im Outlook Express 6

INSTALLATION VON INSTANTRAILS 1.7

-Bundle auf Ihrem virtuellen Server installieren.

SFTP SCP - Synology Wiki

PHP - Projekt Personalverwaltung. Erstellt von James Schüpbach

1. Adressen für den Serienversand (Briefe Katalogdruck Werbung/Anfrage ) auswählen. Die Auswahl kann gespeichert werden.

Einrichten einer Festplatte mit FDISK unter Windows 95/98/98SE/Me

Er musste so eingerichtet werden, dass das D-Laufwerk auf das E-Laufwerk gespiegelt

5 Zweisprachige Seiten

BEDIENUNG ABADISCOVER

Backup der Progress Datenbank

Installationsanleitung dateiagent Pro

Erstellen einer digitalen Signatur für Adobe-Formulare

ACDSee 2009 Tutorials: Rote-Augen-Korrektur

Woche 1: Was ist NLP? Die Geschichte des NLP.

Computer Algebra Plan der Vorlesung. erstes Drittel: linux, emacs, L A TEX zweites Drittel: Sage als Taschenrechner letztes Drittel: Python für Sage

Datensicherung. Beschreibung der Datensicherung

Literatur. Einführung in Unix. Login. Passwort. Mag. Thomas Griesmayer. Benutzererkennung und Passwort Case-Sensitiv Prompt

Umwandeln und Exportieren von Adobe-Illustrator-Dateien in Illustrator für Artcut

Transkript:

Suchen in Files mittels rep Syntax: grep 'reg-exp' files Varianten: fgrep, egrep reg-exp = regular expression (regulärer Ausdruck) Default: alle Zeilen ausgeben, von denen ein Teil den regulären Ausdruck matcht Einige Optionen: -v -i -n -H Invertierung: Zeilen ausgeben, die nicht matchen case-insensitive Zeilennummern mit ausgeben Filenamen zu den Matches ausgeben -e RE weitere reguläre Ausdrücke (Oder-Verknüpfung) 91 Reguläre Ausdrücke Regulärer Ausdruck ist ein String bestehend aus normalen Zeichen und Meta-Zeichen: Meta-Zeichen =.? [ ] * + $ ^ \ ( ) Normale Zeichen = alle übrigen Zeichen Bedeutung: Regulärer Ausdruck RE beschreibt eine Menge(!) LRE von Strings (= Zeichenketten) Sprechweise: Ein String S matcht den regulären Ausdruck RE S LRE Matching: Vergleicht gegebene Zeichenkette und RE von links nach rechts Arbeitet Zeichen ab, falls sie, gemäß Regeln, "übereinstimmen" Arbeitet "greedy" 92 1

Bedeutung der Meta-Zeichen (und damit Definition der regular expressions bzw. Definition von LRE ) Zeichen Bedeutung / Match a matcht das Zeichen selbst (heißt Literal). (Punkt) matcht ein beliebiges Zeichen [abc-f]" matcht ein Zeichen aus {a,b,c,d,e,f} [^abc] matcht ein Zeichen nicht aus {a,b,c} ^$ matchen den Anfang/Ende der Zeile a? a ist optional ("schluckt" a, falls vorhanden) a+ a muß einmal oder öfter vorkommen a* a darf belieb oft, auch keinmal, vorkommen Achtung: bei?, + und * kann a eine beliebige RE sein! (RE) ruppierung RE1 RE2 matcht a oder b \ hebt Bedeutung des nachfolgenden MetaZeichens auf (Quotation) 93 Beispiele für reguläre Ausdrücke Regulärer Ausdruck Strings, die damit matchen (= LRE) [01]+0[01]! Alle Strings bestehend aus 0 und 1, deren vorletztes Zeichen eine 0 ist [a-za-z]+! Wörter nur bestehend aus Buchstaben (ohne Umlaute) (ab)+! ab, abab, ababab,... (aa bb)+! aa, bb, aabb, bbaa, aabbaa, bbaabb,... [0-9]+\.[0-9]+! 0.0, 0.1, 7.2, 00099.999000,... 94 2

Unterschied zwischen File Patterns und Reg-Exp's Achtung: die Meta-Zeichen * und? bedeuten in File-Patterns etwas anderes als in regulären Ausdrücken! Das File-Pattern ab*c matcht auf die Strings (= File-Namen) abc, abxc, ab123c, ab@!#$c,... Der reguläre Ausdruck ab*c matcht auf die Strings ac, abc, abbc, abbbc,... 95 Beispiele mit grep grep 'abc' file : Zeigt alle Zeilen, die "abc" enthalten grep 'a.c' file : alle Zeilen, die "axc" enthalten, wobei x ein beliebiges Zeichen ist grep n my_function *( my_code.c : alle Zeilen, wo my_function aufgerufen wird (oder deklariert wird) grep 'a\[[^]]*\]=' file : alle Vorkommen der Form "a[ ]=", wobei eine beliebig lange Zeichenkette ist, die kein ] enthält (also Zuweisungen an ein Element des Arrays a) grep 'a\[[^]]*\] *=' file : wie vorher, mit beliebig vielen Spaces zwischen "]=" 96 3

grep '(Mr\. Mrs\. Ms\. Dr\.) [A-Za-z]+' sample.txt : Zeigt alle Zeilen mit einer Anrede an grep i 'href=' web_page.html : Zeigt alle Zeilen mit einem Link an (-i = ignore case) 97 Ein Tool zum Experimentieren mit RegExp's http://zach.in.tu-clausthal.de/teaching/werkzeuge_literatur/regexr/ 98 4

Email-Harvesting: grep i '[a-z0-9_\.-]+@([a-z0-9_-]\.)+[a-z0-9][a-z0-9]+' \! web_page.html: Zeigt alle Zeilen mit einer Email-Adresse an Erläuterung: [a-z0-9_\.-]+ = xxx, xxx.xxx, xx-xx.xx, xx_xx., etc. @ = @-Zeichen [a-z0-9_-]\. = xxx., xxx-xxx., xx_xx., etc. ([a-z0-9_-]\.)+ = Folge von xxx. (mindestens 1) [a-z0-9][a-z0-9]+ = Wort mit mindestens 2 Zeichen, ohne./(die "top-level domain") Bemerkung: diese Regex matcht auch ungültige Email-Adressen! 99 Reguläre Ausdrücke in Text-Editoren Beispiel: ein HTML-File enthält folgende große Tabelle <table>! [...]! <tr height="12">! <td height="12" align="right">3245599</td>! <td class="xl24" align="right">5.0</td>! </tr>! <tr height="12">! <td height="12" align="right">3293599</td>! <td class="xl24" align="right">3.3</td>! </tr>! [...]! </table>! Aufgabe: alle Vorkommen von height=".." entfernen Lösung: ein Editor, der reguläre Ausdrücke beherrscht 100 5

Der reguläre Ausdruck, der die gesuchten Vorkommen matcht: / height=".."/! oder / height="[0-9][0-9]"/! oder / height="[0-9]*"/! oder / height="[^"]"/! 101 Welche Prozesse laufen gerade von mir: ps -auxw grep mylogin Linux (und andere von AT&T abgeleitete Unixes) ps -edfl grep myid BSD-Unices Das anze etwas eleganter als Alias: alias myps ps -auxw grep mylogin'! Und noch eleganter, damit es mit jedem Account automatisch funktioniert: alias myps ps -auxw grep `id un` 102 6

Ein einfacher Spell-hecker für Web-Seiten curl "http://zach.in.tu-clausthal.de"! sed 's/[^a-za-z ]/ /g'! tr 'A-Z ' 'a-z\n'! grep '[a-z]'! sort uniq! comm -23 - words.txt! 1. curl liefert die angefragte Webseite auf stdout 2. sed löscht alle Zeichen, die keine Spaces oder Buchstaben sind 3. tr ersetzt alle roßbuchstaben durch kleine Buchstaben; außerdem ersetzt es Spaces durch Newline; jetzt sind alle Wörter auf einer eigenen Zeile 4. grep löscht alle Zeilen, die leer sind (nur Whitespace enthalten) 5. sort uniq sortiert die Liste der Wörter und löscht doppelte 6. comm findet Wörter (Zeilen), die nicht im Wörterbuch enthalten sind (hier /usr/dict/words). 103 Tools, die reguläre Ausdrücke verwenden grep Bessere Text-Editoren: vi / vim / emacs... (vim ist der beste J ) awk / gawk / nawk Pattern scanner / processor sed Stream editor Perl Skriptsprache mit einer extrem mächtigen RegularExpression-Engine für Text-Processing PHP, Javascript (Programmiersprachen für Web-Seiten) U. v. m. 104 7

Weiterführende Links Formale Definition: http://en.wikipedia.org/wiki/regular_expression Definiert eine wesntlich umfangreichere Syntax, zur Beschreibung von sog. "extended regular expressions"! Video-Tutorial (Kopie befindet sich auf der VL-Homepage): http://www.multiurl.com/ga/regexdummies eeignet für Anfänger Auch dieses Tutorial präsentiert extended regular expressions 105 xargs Oft soll am Ende einer Pipeline ein Kommando stehen, das die Eingabe von stdin als Parameter (typ. Filename) verwendet Beispiel: Lösung: xargs % xargs -L 1 command! xargs nimmt jede Zeile von stdin und formt damit ein UnixKommando, indem diese Zeile nach command angefügt wird und als Befehl ausgeführt wird 106 8

Editoren Programmierer schreiben ASII Nur für reines ASII (kein "Markup" irgendwelcher Art) Für kleine Listen Zum Editieren irgendwelcher Text-Files - Z.B.: VisualStudio-Project-Files, XML-Files, HTML-Files - Vor allem zum "remote" Editieren Heiliger Krieg, welches der beste ist Ein Programmier-Editor sollte Effizientes UI haben (ist i. A. nicht intuitiv!) - Wenige Tasten / Mauskilometer für die häufigen Aktionen benötigen Syntax Highlighting Makros o.ä. bieten Reguläre Ausdrücke zum Suchen und Ersetzen ross-platform sein 108 Einige Editoren zur Auswahl vim / gvim (Obermenge von vi, welcher immer installiert ist) Effizientester Editor, steilste Lernkurve Die Homepage von vim: www.vim.org emacs/xemacs (extrem umfangreich) "Emacs wäre gar kein so schlechtes Betriebssystem, wenn es nur einen brauchbaren Editor hätte" J kate / kwrite oder nedit (kein non-ui-mode taugt nicht zum remote Editieren, sonst durchaus eine Alternative) 109 9

Meine Empfehlung: Für diejenigen, die sog. "power user" werden wollen: suchen Sie sich einen mächtigen, effizienten, und cross-plattform ASII-Editor aus, und lernen Sie diesen beherschen (dauert eine Weile) - vim, emacs / xemacs, nedit, Für alle anderen: nehmen Sie den im Menü angebotenen Editor - Unter Linux: kedit myfile.txt (oder vom "K"-Menü aus) - Mac: /Applications/TextEdit.app Reference-ards für VIM und Emacs auf der Homepage der Vorlesung 110 Die wichtigsten Befehle in vi / vim / gvim Besonderheit: Vim ist Mode-basiert!! Default- ("Home"-) Modus = Kommando-Modus Aus jedem anderen Mode kommt man mit <Esc> dorthin zurück Tasten: i Insert-Mode = Einfügen von Text an der aktuellen ursor-pos. R Replace-Mode = Überschreiben x aktuelles Zeichen löschen :w File speichern :q Vim verlassen / suchen n nächstes Vorkommen suchen. letztes Kommando wiederholen :q! Schließen ohne zu speichern 111 10

Programmierung von Shell Scripts Die Shell hat 2 Aufgaben: Als Kommandozeilen-Interpreter, d.h., als direkte Schnittstelle zum Kernel Als Programmiersprache Ein Shell-Programm heißt Script Sprachumfang: Alle Kommandos / Syntax bisher - D.h., alles was man interaktiv schreiben kann, kann man auch als Script schreiben Die üblichen Konstrukte (Schleifen, Verzweigungen, etc.) enereller Aufbau: #!/bin/bash -p!! anz normaler ASII-File Spezielle erste Zeile! # Kommmentar! #! Executable-Bit setzen: chmod u+x script! commands!! Ausführen mit./script, oder in ein Verzeichnis im PATH moven 112 Parameter von der Kommandozeile Ein Shell-Skript ist ein ganz normales Kommando, wie jedes andere auch Fazit 1: Shell-Skripte werden im PATH gesucht Wer "langlebige" eigene Shell-Skripte schreibt, sollte folgendes machen: Verzeichnis ~/bin anlegen setenv PATH ${PATH}:${HOME}/bin Fazit 2: Shell-Skripte können Parameter erhalten Z.B. bei einem Aufruf der Art % my_script hallo! Diese Parameter kann man innerhalb des Skriptes durch die speziellen Variablen $1 $2 etc. abfragen (reine Zeichenketten): #!/bin/bash -p! echo $1! 113 11

Beispiel: ein reversibles rm-kommando Erinnerung: % ls foot.c foot.h foot.o toe.c toe.o % rm *.o rm:.o no such file or directory % ls % Eine Idee: ersetze rm x durch mv x ~/.Trash Lösung: ein Shell-Skript #!/bin/bash -p mv $1 ~/.Trash Speichere das Shell-Script in ~/bin (z.b.) Trage ~/bin in PATH ein Evtl. noch: % alias rm rmm 114 For-Schleifen in Shell-Skripts Syntax: #!/bin/bash -p for x in word-list do commands done Weist x nacheinander die Wörter in word-list zu, und arbeitet die Kommandos ab. Innerhalb dieser kann x wie jede andere Variable verwendet werden. Beispiel: #!/bin/bash -p for f in *.png do ls -l $f done 115 12

Weitere Beispiele Häufiges Problem: Liste von Files umbenennen #!/bin/bash p for f in *.cxx do mv $f ${f%cxx}cpp done Wird von der Shell expandiert, bevor die Schleife gestartet wird! 117 Etwas kompliziertere Umbenennung: egeben: ein Verzeichnis mit 100 Files, von denen manche eine Nummer als Präfix haben, manche nicht 01 - Private SNAFU - Snafuperman.mp4 02 - Aesop's Fables - 1927.mpg Private SNAFU - Home Front.mp4 Aesop's Fables - Silvery Moon (1933).mpg A is for Atom.mp4 Aufgabe: die Nummer am Anfang des File-Namens löschen Lösung: #!/bin/bash p for f in [0-9][0-9]*.mp4 do mv $f ${f#?? - }; done 118 13

Noch etwas kompliziertere Umbenennung: asphaltierte_strase_schottland_101258644.jpg auffahrt_in_einem_parkhaus_101258631.jpg ausblick_aus_einem_heisluftballon_101258639.jpg autobahnkreuz_in_hangzhong_shanghai_china_101245416.jpg car_wash_101258632.jpg einsame_frau_101258638.jpg fusabdrucke_auf_burgersteig_101258648.jpg gras_im_asphalt_100818124.jpg hund_am_steuer_101258645.jpg kopfsteinpflaster_in_kopenhagen_danemark_101258637.jpg #!/bin/bash p for f in *.jpg; do mv "$f" "${f%_[0-9]*.jpg}.jpg"; done 119 Weiteres häufiges Problem: Liste von Bildern konvertieren Beispiel: alle PNs in einem Verzeichnis, deren Filename mit 01 oder 02 beginnt, in JPs konvertieren Lösung: #!/bin/bash p for f in 0[12]*.png do convert $f ${f%png}jpg done Anmerkung: convert ist ein Tool aus der Bildbearbeitungs-Suite ImageMagick; muß man evtl. nach-installieren 120 14

Nach dem Kopieren des Bildarchives einer Web-Site entstand folgendes Unterverzeichnis: hostname: bildarchiv/pics% ls 1000_1137871168348b.jpg 1644_11518627567274.jpg 1000_1137871168dc0d.jpg 1644_11518627567371.jpg 1001_113787116947c0.jpg 1644_1151862756dc9b.jpg 1002_1137871170dc0d.jpg 1644_1151862756f176.jpg 1003_113787117047c0.jpg 1645_11518627561778.jpg 1004_1137871171fa36.jpg 1645_11518627566227.jpg 1005_11378711721408.jpg 1645_1151862756a590.jpg 435_113416441328e5.jpg 435_11341644136720.jpg 435_11341644139fb5.jpg 435_1134164413a1db.jpg 435_1134164413d226.jpg 435_1134164413d42c.jpg 436_11341648314031.jpg Problem: alle Bilder der Form 123_*.jpg waren exakte Kopien voneinander Aufgabe: von jeder solchen Menge von Kopien alle bis auf eine löschen Lösung: $ for f in *.jpg; do mv $f ${f%_*}.jpg; done 123 Beispiel: Automatisierung von Tests / Experimenten egeben: ein Experiment (real oder simuliert) hat viele Daten-Files generiert clustered-0.1-10000.dat clustered-0.1-500000.dat clustered-0.3-10000.dat clustered-1.0-10000.dat correlated-1.0-10000.dat clustered-0.1-100000.dat correlated-0.1-100000.dat correlated-0.1-500000.dat correlated-0.3-10000.dat uniform-0.1-100000.dat correlated-0.1-10000.dat uniform-1.0-10000.dat uniform-0.3-10000.dat uniform-0.1-500000.dat uniform-0.1-10000.dat Aufgabe: die darin enthaltenen Reihen plotten Lösung: ein Shell-Skript zur Automatisierung #!/bin/bash -p eps="0.1" points="10000" for distrib in "uniform" "correlated" "clustered" do sed -e "s/distrib/$distrib/" -e "s/eps/$eps/" -e "s/points/$points/" \ data_template.plt > data.plt gnuplot data.plt done 126 15

Alternative #!/bin/bash -p # Plot the statistics data gained with kdtreewithstatistics.py eps="0.1" points="10000" for distrib in "uniform" "correlated" "clustered" do nuplot kann von Stdin seine Kommandos lesen; gnuplot << EOF << EOF ist eine spezielle Redirection, bei der die Eingabe direkt aus den nachfolgenden Zeilen des Shell-Skripts set key left Selbst kommt (und nicht aus einem anderen File) set xlabel "dimensions" set ylabel "fraction of leaves visited (avg)" offset 1 set style data lines set output "../plots/$distrib-$eps-$points.pdf" set title "$distrib distribution, eps = $eps, #points = $points" plot "../plots/dat/$distrib-$eps-$points.dat" using 1:(\$2/$points) title "exact NN", \ "../plots/dat/$distrib-$eps-$points.dat" using 1:(\$3/$points) title "approx NN" EOF done 127 Bedingungen in Shell-Scripts Syntax: #!/bin/bash -p if [[ bedingung ]] then... fi Beispiele: if [[ -f filename ]] if [[ -d filename ]] if [[! bedingung ]] # Test, ob File filename existiert # Test, ob filename existiert und ein Verzeichnis ist # Test, ob Bedingung nicht erfüllt ist Siehe die Man-Page der bash für viele weitere Tests 128 16

Anwendung auf unser rm-beispiel: Was, wenn das Verzeichnis ~/.Trash noch nicht existiert? Lösung: #!/bin/bash -p trash=~/.trash if [[! -d $trash ]] then echo reating directory $trash mkdir $trash fi mv $1 $trash 129 Die while-schleife 130 17

Minimalwissen Folgende Befehle sollten Sie gut beherrschen: ls, cd, mkdir, rmdir, cp, mv, rm, ln, chmod, less, cat, sort, wc grep, find ps, jobs, kill Lesen Sie deren Man-Pages (immer wieder) 131 Empfehlung für Unix-uru-Aspiranten Die Kommandos sed - "stream editor" awk - pattern scanning and processing language tr, cut, sort, uniq, 132 18

Initialisierungs-Files Für tcsh: ~/.tcshrc (und ~/.cshrc)! Für bash: ~/.bashrc Inhalt: beliebige Kommandos (shell-built-in & extern) Ausgeführt von jeder Shell des Users Typischerweise: Environment-Variablen setzen (PATH, MANPATH, ) Aliases definieren ompletion-regeln (für Tab an verschiedenen Positionen) Achtung: neue Shell aufmachen, falls Änderung 133 Empfehlung: Dot-Files von der Vorlesungs-Home-Page installieren Downloaden Sie http://zach.in.tu-clausthal.de/teaching/werkzeuge/downloads/ dotfiles.tar.gz Ins Home verschieben: mv./dotfiles.tar.gz ~! Sicherheitskopie das alten.cshrc: mv.cshrc.cshrc.old Auspacken: tar tzvf dotfiles.tar.gz! Neue Shell aufmachen (zum Test) 134 19