Familie von Zeichenkettensuchprogrammen "grep", "egrep", "fgrep"

Ähnliche Dokumente
Stream EDitor SED und Reguläre Ausdrücke

Proseminar UNIX Tools. Ferdinand Beyer

Ein- und Ausgabeumlenkung

8. Arbeiten mit Dateien

Ferdinand Beyer. 1 Allgemeines Beschreibung Bezeichnungen Einsatzgebiete in UNIX-Tools Notationsarten...

lex - Eine Einführung

Proseminar. C-Programmierung Grundlagen und Konzepte. Der Präprozessor. von: Svenja Neef

Übersicht Shell-Scripten

UNIX Power Tools. Helferlein für den Alltag. Maximilian Haupt

Elementare Unix-Befehle 11

Formale Sprachen und Automaten

Compilerbau. Übung 2. Prof. Johann-Christoph Freytag Dr. Klaus Ahrens Jörg Bachmann Fabian Fier Dorian Weber. 18. Mai 2016

15 Der AWK. (Aho, Weinberger, Kernighan)

Einstieg in die Informatik mit Java

3 Regular expressions

Es können mehrere Kommandos in der Kommandozeile eingegeben werden Kommandoverkettung.

Reguläre Ausdrücke IDE AUTUMN SCHOOL

Excel + VBA. Ergänzungen. Kapitel 1 Einführung in VBA Sequentielle Textdateien HARALD NAHRSTEDT. Erstellt am

1.103 Regular Expressions - Reguläre Ausdrücke

1.103 Grundlagen der Dateibearbeitung mit vi

Eine kurze Einführung in Vim

Unix/Linux Grundlagen für Einsteiger

Programmieren in C++

6 Bearbeitung von Texten

Lexikalische Struktur von Fortran 95. Normierte Zeichensätze

5 Bearbeitung von Texten

Der Standard-Editor vi

Vordiplom Wirtschaftswissenschaften Allgemeine Informatik I WS 2001/ April 2002

Empfehlenswerte Referenzen

Neuerungen in TUSTEP Version 2018 gegenüber Version 2017 (Übersicht) Stand:

Unix Grundlagen. - ii - Ambit Professional Seminar Series. Autor: Prof. J. Anton Illik Diplom-Informatiker

Basiskonzepte des Rechnerbetriebs

2 Eine einfache Programmiersprache

2 Eine einfache Programmiersprache. Variablen. Operationen Zuweisung. Variablen

Linux I II III Res/Pro WN/TT Reguläre Ausdrücke Editoren Scripting. Linux II. 2 Linux II. Reguläre Ausdrücke Editoren Scripting. Ressourcen-Vorkurs

5 par2sfs, awk und sed

Grundlagen der Informatik

Übersicht PERL. !!!! Wichtig: Nach dem Befehl einem Strichpunkt setzen!!!!

Regular Expressions. Daniel Lutz Was ist eine Regular Expression?

2 Eine einfache Programmiersprache

2 Eine einfache Programmiersprache

Perl. Unser erstes Programm. Grundaufbau eines Programms

Wintersemester Maschinenbau und Kunststofftechnik. Informatik. Tobias Wolf Seite 1 von 23

Systemverwaltung mittels Skripts

Verwenden Sie für jede Aufgabe die C++ IDE von Eclipse (pro Aufgabe ein Projekt).

Der vi Editor. Vortrag im Rahmen des Proseminars Unix Tools an der Technischen Universität München im Sommersemester 2005

Übungs- und Praktikumsaufgaben zur Systemprogrammierung Dipl.-Ing. H. Büchter (Lehrbeauftragter) FH-Dortmund WS 2001/2002 / SS 2002

Arbeiten mit der Shell Teil 2

Grundlagen der Informatik Vorlesungsskript

Anleitung. In Bild und Wort. Startmeldungen an den Kreis. Version 9.1

Institut für Programmierung und Reaktive Systeme 10. Mai Programmieren II. 11. Übungsblatt

FACHHOCHSCHULE MANNHEIM

Die Klasse string Verfasser: Christian Bartl

6 Ein- und Ausgabe. Bisher war unsere (Bildschirm-) Ausgabe leichtflüchtig (

Deshalb ist hello + world = 0. Umgekehrt gilt das Gleiche, weshalb 8 plus 3 gleich 83 ist. Dies ist in Zeile 5 in Terminal 2 gezeigt. In der Regel sol

DHBW Karlsruhe, Angewandte Informatik Programmieren in JAVA W. Geiger, T. Schlachter, C. Schmitt, W.

Ein erstes "Hello world!" Programm

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

Zuerst wird die Bedingung ausgewertet. Ist sie erfüllt, wird der Rumpf des while-statements ausgeführt. Nach Ausführung des Rumpfs wird das gesamte

Der Stream-Editor Sed: Einführung, Tipps und Tricks

Python für Linguisten

Kommandozeileneingabe. Einführung in Perl Kommandozeileneingabe etc. Kommandozeileneingabe Optionen. Kommandozeileneingabe Bsp (1)

Webengineering. Reguläre Ausdrücke. Dienstag, 2. Juli 13

Hilfe zur Bedienung finden Sie stets beim Buchsymbol Info.

Der Stream-Editor Sed Einführung, Tips und Tricks

GI Vektoren

shell stdio HOWTO.txt

C - PRÄPROZESSOR. Seminar effiziente C Programmierung WS 2012/13. Von Christian Peter

Hochschule Darmstadt Informatik-Praktikum WS 2017/2018 WIng Bachelor 6. Aufgabenblatt Zeiger, verkettete Liste, Dateieingabe und -ausgabe

Erste Schritte in TUSTEP

Lesen und Schreiben von Dateien

SelfLinux Dateien unter Linux

Der UNIX-Werkzeugkasten Programmieren mit UNIX

Strings. Daten aus Dateien einlesen und in Dateien speichern.

Reguläre Ausdrücke. Michael Jäger. 4. April 2017

Wiederholung. Ein deterministischer endlicher Automat (DEA) über einem Alphabet A besteht aus: einer endlichen Menge von Zuständen Q,

E-/A-Funktionalität nicht Teil der Programmiersprache

Unterschiede in Dateien mit diff

Arithmetik in der tcsh

4 ZEICHEN UND ZEICHENKETTEN

SelfLinux Dateien unter Linux

Teil 1: Einführung in die Shell. Was ist die Shell? Wichtige Kommandos (1) Einführung in die Shell. Grundlagen der Shell-Programmierung

2 Eine einfache Programmiersprache

Programmieren in C/C++ und MATLAB

Methoden. Gerd Bohlender. Einstieg in die Informatik mit Java, Vorlesung vom

Python für Linguisten

1. Allgemeine Datei (Binärdatei mit formatierten Inhalt)

Arbeiten mit der Shell Teil 2

Informatik für Schüler, Foliensatz 10 Wiederholung und Listen

Transkript:

für die Arbeit mit Files 9.Hilfsrogramme ========================================= Stream Editor "" 9.1 Familie von Zeichenkettensuchrogrammen "gre", "egre", "fgre" 9.2 9.3 File Such Programm "find" j bell Seite 1 Der Stream Editor 9.1. =========================== Ein kleiner Übersetzer für alle Fälle. Grundätzliches wurde vom zeilenorientierten, dialogfähigem Editor ed abgeleitet. ist nicht dialogorientiert!!!! liest die Editorkommandos von der Kommandozeile oder einer Datei. aus liest die zu editierenden Daten aus einem File oder von Standardeingabe. der gibt die editierten Daten immer auf der Standardausgabe aus!!!!!!! Nicht die zu editierende Datei gleichzeitig Achtung!!! Standardausgabe benutzen!!! Totaler Datenverlust!!!! als ist ein kleiner leistungsfähiger Editor für Modifizierung Dateien oder zur Extrahierung von Daten. Er wird von in Shellscriten eingesetzt. Er ist schneller als häufig hat aber eine geringer Leistungsfähigkeit. awk, j bell Seite 2

Funktionsweise des Prinziielle Als erstes werden alle Editierkommandos eingelesen 1. oder Skrit Datei) (Kommanodzeile Dann wird die erste Zeile aus der Eingabedatei in einen 2. gelesen (Standardeingabe oder File) Eingabeuffer Jetzt werden der Reihe nach alle Editorkommandos der 3. nach gerüft, ob sie anwendbar sind und wenn ja Reihe sofort ausgeführt. b1 Das Ergebnis aller Editorkommandos wir auf die 4. ausgegeben. Standardausgabe 5. Der Eingabeuffer wird gelöscht. Eine neü Zeile wird in den Eingabeuffer gelesen 6. bei 3. fortgesetzt. Bei Erkennung von EOF beendet und die Arbeit. j bell Seite 3 Aufruf von Der [ nv] [ quiet] [ silent] [ version] <editorkommando>] [ f <skritdatei>] [ e [ in lace[=<suffix>]] [ i[<suffix>] [ r] [ exression=<editorkommando>] [ file=< skritdatei > ] {<dateiname>} quiet, silent n, wird nur ausgegeben, wenn dies exlizit durch ein Zeile innerhalb der Editorkommando gefordert wird. Kommando V, version der Verionsnummer Ausgabe hel einer kurzen Hilfeinformation für den Ausgabe von Aufruf <Skrit file>, file=<skrit file> f eines Files, das die Editorkommando enthält. Definition i[<suffix>] im aktuellen File Editieren <editorkommando> e eines Editorkommandos. Kann mehrfach vorkommen. Definition nur ein Editorkommando benötigt, kann diese auch ohne Wird angegeben werden. " e" <dateiname> r des zu editierenden Files. Mehre Filenamen sind zulässig. Name kein Filename sezifiziert, wird Standardeingabe benutzt. Ist von erweiterten (fast vollständigen) regulären Benutzung Ausdrücken. j bell Seite 4

Beisiele: einige # ausgeben # s ersetzen # V version # Version ausgeben e "" d1 > d1 edit b0 "" d1 > d1 edit # Ausgbe aller Zeilen doelt e "s/a/aa/" e d1 "s/a/aa/" d1 # Substitution e s/a/aa/ e d1 n e s/a/aa/ d1 n e s/a/aa/ e d1 quiet e s/a/aa/ e d1 silent e s/a/aa/ e d1 # nur Zeilen ausgeben n exression=s/a/aa/ e d1 f s1 e d1 e f s1 d1 e f s1 e d1 file=s1 e d1 j bell Seite 5 Editorkommando [<adresse1> [","<adresse2>]]<kommando>[<argument>] [<adresse1>","[<adresse2>]] diese Adressen wird ein Bereich von hintereinander Durch Zeilen beschrieben. Dabei bedeutet: stehenden Adresse alle Zeilen des Eingabefiles keine Adresse alle Zeilen, auf die die Adresse zutrifft eine von Eingabezeilen Bereich alle Zeilen dieses Bereiches, die Grenzen zum Bereich. gehören und <adresse2> stellen Adressen dar. Eine Adresse <adresse1> ist: Zahl Nummer einer Zeile, bei mehreren Eingabedateien ganze fortlaufend gezählt. wird Dollarzeichen steht für die letzte Eingabezeile, $ Zeile der letzten Eingabedatei. letzte Ausdruck>/ /<regulärer adressiert alle Zeilen, die einen String enthalten, der auf den regulären Ausdruck asst. b2 j bell Seite 6

Reguläre Ausdrücke im (eingeschränkt) Metazeichen: Maskierung eines Metazeichens \ Zeilenanfang ^ Zeilenende $ beliebiges Zeichen, ausser <NL>. ] Klasse von Zeichen [... [abc] eines der Zeiche a, b oder c z.b. eines der Zeichen a bis f [a fs z] s bis z oder Komlementklasse von Zeichen [^...] [^A Z] alle Zeichen, ausser Grossbuchstaben z.b. Null oder beliebig häufiges Auftreten des * Zeichens. vorangegangenen a*b bedeutet b, ab,aab,aaab,... z.b. String <str> \(<str>\) genau <nr> maliges Vorkommen \{<nr>\} mindestens <nr> maliges Vorkommen \{<nr,\} mindestens <nr1> maliges Vorkommen, höchstens \{<nr1,<nr2\} <nr2> maliges entsricht dem <nr> ten Ausdruck der zuvor \<nr> \(<str>\) in dem selben String auftrat. durch "^\(.*\)\1$" entsricht allen Zeilen, die z.b. aus zwei gleichen Zeichenketten bestehen. b3 j bell Seite 7 Beisiele: Einfache Zeichenketten: n e /o/ d2 n e /er/ d2 n e /o/,$ d2 n e 3,/o/ d2 n e /o/,/i/ d2 b4 Zeilenanfang und Zeilenende: <String> am Zeilenanfang ^<String> <String> am Zeilenende <String>$ Zeile enthält nur <String> ^<String>$ Leerzeile ^$ Zeile mit genau einem Zeichen ^.$ Zeile mit genau vier Zeichen ^...$ "/^#/d" d2 entfernt alle Kommentarzeilen aus b1 Zeichenklassen Komlementklassen: n "/[ö]/" d2 n "/^[^ö]*$/" d2 b5 j bell Seite 8

Wiederholungen: n /^.\{4\}$/ d2 n /^.\{5,8\}$/ d2 Wiederholungen von Buchstaben n /ir*/ d2 n /irr*/ d2 n ter Teilausdruck n /\(alle\) \1/ d3 n /\(...\) \1/ d3 n /\(...\).*\1/ d3 b6 b7 b8 j bell Seite 9 Übersicht Zeilenorientierte aend lines (Anfügen) a\ change line (Ersetzen der Zeile) c\ delete line (löschen einer Zeile) d insert line (einfügen vor der Zeile) i\ next line (Ausgabe des Eingbeuffers) n Ersetzungskommandos substitute (ersetzen eines regulären Ausdrucks) s y translate (übersersetzen von mehreren Zeichen ) E/A list (Ausgabe des Eingabeuffers, nicht druckbare l werden übersetzt) Zeichen rint (Ausgabe des Eingabeuffers) read (Lesen einer Datei und auf ausgeben) r write (Eingabeuffer in Datei schreiben) w Mehrzeilen delete first art of attern (Löschen) D next line (nächste Eingabezeile an Eingabeuffer anhängen) N rint (erster Teil des Eingabeuffers ausgeben) P j bell Seite 10

für Zwischenseicherung Eingabeuffer wird durch Zwischenseicher überschrieben g Zwischenseicher am Ende des Eingabeuffers G durch <NL> getrennt anhängen, Zwischenseicher durch Eingabeuffer überschreiben h Inhalt des Eingabeuffers am Ende des Zwischseichers H durch <NL> getrennt anhängen, exchange (austauschen Zwischenseicher und Eingabeuffer) x für die Ablaufsteürung branch (Srung zur Marke) b test jum (bedingter Srung im Scrit) t Verneinung der Adressangabe! :ma Marke im Scrit Sonstige quit (Ende) q Ausgabe der Zeilennummer als eigene Zeile = Kommentar # j bell Seite 11 Zeilenorientierte a\ aend lines nachfolgende Zeile wird nach Ausgabe des Eingabeuffers Die Sollen mehrere Zeilen angefügt werden, so sind ausgeschrieben. die <NL> Zeichen durch "\" zu maskieren. /^#/a\ # # d2 c\ change line b9,b10 des Eingabeuffers durch die nachfolgende Zeile. Ersetzen Eingabeuffer wird dann ausgegeben. Mehrere Zeilen können Der wie bei a\ ersetzt werden. /^#/c\ war ein Kommentar # # hier d2 b11,b12 j bell Seite 12

j bell Seite 13 i\ insert line von nachfolgenden Zeilen vor der aktuellen Zeile aus Einfügen Eingabeuffer. dem /^#/i\ folgt ein Kommentar # d2 # es b13,b14 d delete line einer Zeile aus dem Eingabeuffer. Die Arbeit wird bei Löschen nächsten Zeile am Beginn des Scrits fortgesetzt. der /^#/d d2 n next line des Eingbeuffers. Einlesen der nächsten Zeile und Ausgabe des Scrites an der aktuellen Position. fortsetzen Ersetzungskommandos e /^#/n e /^#/d b16 s/<regulärer Ausdruck>/<String>/[<flag>] substitute eines regulären Ausdrucks durch einen String. Ersetzen g global ersetzen aller möglichen Teilstrings <flag> b15 b16 rint Ausgabe des Eingabeuffers, falls Ersetzung stattfand eine <file> write Ausgabe des Eingabeuffers, falls w Ersetzung stattfand in das eine File <file> e s/o.$/xxxxxx/ e /^#/d d2 y/<string1>/<string2>/ translate der in <String1> vorkommenden Zeichen durch die Ersetzen der entsrechenden Position in <String2> vorkommenden an Zeichen. <String1> und <String2> müssen gleich lang sein. e s/äiou/aeiou/ e /^#/d d2 b17 b18 j bell Seite 14

E/A rint des Eingabeuffers. Diese Oeration findet zu dem Ausgabe statt, zu dem das Kommando im Scrit steht. Zeitunkt bis dahin durchgeführten Veränderungen am Ausgabeuffer Die mit ausgegeben. werden e /^#/d e y/äiou/aeiou/ \ l list \ e y/bcdfghjklmnqrstvwxyz/bcdfghjklmnpqrstvwxyz/ d2 e des Eingabeuffers. Dabei werden nicht druckbare Ausgabe als ASCII Werte (drei Oktalziffern mit vorangestelltem Zeichen oder, wenn möglich, in C Notation ausgegeben. Überlange "\") werden in mehrere Zeilen zerlegt. Für das Zeilenende wird Zeilen ein "$" ausgegeben. b19 n e l d5 # nicht druckbare Zeichen werden sichtbar b20 # j bell Seite 15 r <file> read der aktuellen Eingabeuffers. Ausgabe der fertigen Weiterbearbeiten Lesen der Datei <file> und Ausgabe dieses Files. Eingabeuffers. Zwischen dem Buchstaben "r" und dem Filenamen steht Achtung: ein Leerzeichen!!! genau e /worf/r d5 e s/orf/xxxxx/ d2 w <file> write to file aktuelle Eingabeuffer wird an die Datei <file> angehängt. Der Beginn der Arbeit wird eine leere Datei <file> erzeugt. Vor dem w Kommando darf kein weiteres Kommando folgen. Nach Zwischen dem Buchstaben "w" und dem Filenamen steht Achtung: genau ein Leerzeichen!!! e /o/w d6 d2 b21 b22 j bell Seite 16

Mehrzeilen N next line nächste Eingabezeile an Eingabeuffer angehängt. Das <NL> Die bleibt im Eingabeuffer erhalten. Nachfolgende Zeichen können jetzt dieses <NL> Zeichen ersetzen. e / $/N e s/ \n// d7 In diesem Beisiel können nie mehr als zwei Achtung: Zeilen miteinander verbunden werden!! D delete first art of attern des ersten Teils des Eingabeuffers bis zum <NL> Löschen Danach wird das gesammte Scrit noch einmal Zeichen. Wenn kein <NL> Zeichen im Eingabeuffer gestartet. ist entsricht dieses Kommando dem d Kommando. vorhanden Kommando macht nur in Verbindung mit dem N Kommando Dieses sinn!!! b23 j bell Seite 17 P rint Teil des Eingabeuffers wird bis einschliesslich Erster <NL> Zeichens ausgegeben. Wenn kein <NL> Zeichen eines Eingabeuffer vorhanden ist entsricht dieses Kommando im Kommando. dem f s24 d8 s24: /Raum/P /Raum/D N N N [a za Z][a za Z]*//g s/[12] \([a za Z]\)/\2/g s/\([34]\) /g s/\n/ / s/^/ P D b24 j bell Seite 18

für Zwischenseicherung dem Eingabeuffer wird im auch noch ein Zwischenseicher Neben Zwischen Eingabeuffer und Zwischenuffer können Daten verwaltet. hin und her transortiert werden. g Eingabeuffer wird durch Zwischenseicher überschrieben h Zwischenseicher durch Eingabeuffer überschreiben n f s25 d9 s25: 1h 1d /^$/ /^$/d /#/g Inhalt des Eingabeuffers am Ende des Zwischseichers H durch <NL> getrennt anhängen, b25 j bell Seite 19 Zwischenseicher am Ende des Eingabeuffers G durch <NL> getrennt anhängen, n f s26 d2 s26: /^$/ /^$/d /o/h /o/d $G exchange (austauschen Zwischenseicher und Eingabeuffer) x n f s27 d2 s27: 1h 1d /^$/ /^$/d /o/x /#/x b26 b27 j bell Seite 20

für die Ablaufsteürung :ma label eine Srungmarke für die b und t. Definiert Marke ist ein normaler Bezeichner. Eine :marke :Ende b <label> branch zur Marke <label>. Zwischen dem b Kommando und der Srung muss ein Leerzeichen stehen. Marke n f s28 d2 s28: ENDE /worf/b /o/d :ENDE b28 j bell Seite 21 t <label> test and jum Srung im Scrit. Falls nach dem Einlesen in Bedingter Eingabeuffer bzw. nach dem letzten t Kommando eine den stattgefunden hat wird ein Srung zur angegebenen Substitution <label> ausgeführt. Marke n f s29 d2 s29: :Start /o/s/o/xxx/ Start t!<kommando> Verneinung der Adressangabe die Vorangestellte Adressangabe zutrifft, wird das Wenn Kommando <Kommando> nicht ausgeführt. nachfolgende n e /worf/!s/o/xxx/ e d2 b29 b30 j bell Seite 22

{.. } Klammerung von können zu Gruen zusammengefasst werden, Hierdurch nur ausgeführt werden, wenn die vorangestellte Adressangabe die asst. n f s31 d2 s31: /o/{s/r/r/g } s/c/c/g b31 j bell Seite 23 Sonstige q quit des Streameditors. Der aktuelle Eingabeuffer wird Beenden und der Streameditor wird beendet. ausgegeben e 3q d2 = Ausgabe der Zeilennummer als eigene Zeile e = d2 # Kommentar Zeilen, die mit # beginnen werden als Kommentar gewertet. b32 b33 j bell Seite 24