Unix-Tools für Korpusbearbeitung
Transcrição
Unix-Tools für Korpusbearbeitung
Unix-Tools für Korpusbearbeitung SS2006 Nagel & Lee 1 Unix-Befehle zusammengefaßt Hilfe zu Unix-Befehle $man <Befehl> % zeigt Infos zum betreffenden Unix-Befehl Beispiele: $man sort $man man $info <Befehl> % zeigt Infos ausfhrlich zum betreffenden Unix-Befehl Beispiele: $info sort $info grep Option -k $man -k <Stichwort> % zeigt manpages zum betreffenden ‘Stichwort’ Beispiele: $man -k sort $man -k edit Unix-Befehle: Übersicht Befehl cd pwd mkdir ls rmdir cat tac rev > < >> less more head tail | cp rm mv chmod Bedeutung change directory display the present working directory make directory list the contents of a directory remove directory show the contents of a file show the contents of a file reversely show the contents of a file reversely redirect the standard output to the file read from the file append the standard output to the file display a file, one screen at a time display a file, one screen at a time display the first n lines from the file display the last n lines from the file pipe copy the file to the directory or file remove the file move the file to the directory or file change the access mode 1 Beispiel $cd .. $pwd $mkdir korpus $ls -l korpus $rmdir korpus $cat datei.txt $tac datei.txt $cat datei.txt | rev $cat datei.txt > datei2.txt $cat < datei2.txt $cat datei.txt >> datei2.txt $less datei.txt $more datei.txt $head -10 datei.txt $tail -10 datei.txt $cat datei.txt | less $cp datei.txt datei3.txt $rm datei3.txt $mv datei.txt korpus $chmod 755 datei.txt wc tr sort uniq cut paste zip unzip gzip gunzip tar grep ptx comm diff find 2 count the words of the file substitute the characters sort the contents of the file delete the repeated lines cut the selected fields paste lines from files sequentially in columns compress the file decompress the file gnu zip version gnu unzip version summarize several files into the one archive file search a file for the a pattern produce a permuted index of file contents find lines that are common, and lines that are unique find differences between two files find name in the file from the start directory $wc datei.txt $tr “a” “x” <datei.txt | less $sort -u datei.txt $sort datei.txt | uniq $cut -f2 datei.txt $paste Datei1 Datei2 $zip zipdatei datei.txt $unzip zipdatei.zip $gzip datei.txt $gunzip datei.gz $tar -cvzf datei.tgz datei1 datei2 $grep “name” datei.txt | less ptx -w 80 -o suchwoerter datei comm Datei1 Datei2 diff fromdatei.txt todatei.txt $find . -name datei.txt Unixtools für Korpusbearbeitung tr Der tr-Befehl ersetzt einzelne Zeichen durch andere, oder löscht einzelne Zeichen. tr arbeitet als Filter, das heißt, dass Daten von der Standardeingabe gelesen wird, und Ergebnis zur Standardausgabe wiedergegeben wird. Der Gebrauch von tr wird mit Eingabe- und Ausgabeumlenkung (redirect) erfolgen, oder innerhalb einer Pipe. Syntax: $tr [Optionen] [Zeichenkette1 [Zeichenkette2]] Nützliche Optionen: -c Veranlaßt die Verwendung des Komplements von Zeichenkette1 -d Löscht alle Zeichen aus Zeichenkette1 aus dem Eingabestrom -s Ignoriert wiederholt auftretende Zeichen in Zeichenkette2 -t Verkürzt Zeichenkette1 vor dem Transliteration auf die Länge von Zeichenkette2 Sonderzeichen: \a Glocke \b Backspace \f Seitenvorschub \n Zeilenwechsel \r Waagenrücklauf \t Tabulator \v vertikaler Tabulator \nnn Zeichen mit dem Oktalwert nnn \\ Backslash-Zeichen Zeichenklassen: 2 Zeichen1-Zeichen2 [Zeichen1-Zeichen2] [:alnum:] [:alpha:] [:blank:] [:cntrl:] [:digit:] [:graph:] [:lower:] [:print:] [:punct:] [:space:] [:upper:] [:xdigit:] [Zeichen] Alle Zeichen im Bereich von Zeichen1 bis Zeichen2 Gleich wie Zeichen1-Zeichen2 Buchstaben und Zahlen Buchstaben Leerraum Steuerzeichen Ziffern druckbare Zeichen außer Leerzeichen Kleinbuchstaben druckbare Zeichen Interpunktion Leerraum(horizontal oder vertikal) Großbuchstaben hexadezimale Ziffern Zeichen in Zeichenkette2 auf die Länge von Zeichenkette1 vervielfachen Beispile: $tr ’a’ ’x’ < sz.txt | less Alle Vorkommen von ’a’ in der Datei sz.txt werden durch ein ’x’ ersetzt. $tr ’abc’ ’xyz’ < sz.txt | less Alle Vorkommen von ’a’ werden durch ein ’x’ ersetzt, die von ’b’ durch ein ’y’, und die von ’c’ durch ein ’z’. Falls die Zeichenkette2 kürzer als Zeichenkette1 ist, wird sie intern mit dem letzten Zeichen aus Zeichenkette2 aufgefüllt, bis sie die Länge der Zeichenkette1 hat. $tr ’abc’ ’x’ < sz.txt | less Alle Vorkommen von ’a’, ’b’ oder ’c’ werden durch ein ’x’ ersetzt. $tr -d ’\000’ Entfernt alle Nullbytes $tr -cs ’[:alnum:]’ ’\n’ Konvertiert alle nicht-alphanumerische Zeichen zum Newlinezeichen, und die wiederholten Newlinezeichen zum einzigen Newlinezeichen. Vorsicht: Zeichenklasse [:alpha:] ist von der Einstellung locale abhängig, während die [A-Za-z] nur das englische Alphabet einschließt. Das folgende Beispiel gibt die Liste der doppelt aufeinanderfolgenden Wörter aus: $cat sz.txt | tr -s ’[:punct:][:blank:]’ ’\n’ | tr ’[:upper:]’ ’[:lower:]’ | uniq -d Zuerst werden alle Interpunktionen und Leerzeichen ins Newlinezeichen ersetzt, alle Großbuchstaben in die Kleinbuchstaben, und danach werden nur die doppelt aufeinanderfolgenden Zeile durch -d Option von uniq ausgegeben. 3 sort Sortiert die Zeilen der angegebenen Dateien. Oder vergleicht bestimmte Felder jeweils zweier Zeilen und sortiert danach. Syntax: $sort [Optionen] [Dateien] Nützliche Optionen: -b Führende Leerzeichen und Tabs werden ignoriert -c Überprüft, ob die Dateien bereits sortiert sind -d Sortiert in lexikalischer Ordnung -f Ignoriert Groß-/Kleinschreibung -m Fügt mehrere bereits sortierte Dateien zusammen -n Sortiert in arithmetischer Ordnung -r Sortiert in umgekehrter Ordnung -t<sep> Trennt die Zeile an dem angegebenen Zeichen in Felder auf -u Ersetzt mehrere identische Zeilen durch eine einzige Zeile -k POS1,POS2 Sortierschlüssel sind die Felder POS1 bis POS2, jeweils inklusive Beispiele: $sort -fd wortliste | uniq -c Sortiert eine Wortliste in lexikalischer Ordnung, und dann durch uniq -c entfernt Duplikate und gibt die Häufigkeit der einzlenen Wörter aus. $sort -n -t: -k3,3 /etc/passwd Sortiert die Paßwortdatei in numerischer Ordnung anhand des dritten Feldes. Das folgende Programm gibt die Wortliste nach Frequenz sortiert aus: $cat sz.txt | tr -cd ’A-Za-z0-9 \012’ | tr -s ’ ’ ’\012’ | sort | uniq -c | sort -nr | less Zuerst werden alle außer alphanumerischen, Leer- und Newlinezeichen gelöscht, und danach werden alle Leerzeichen durch -s Option zum Newlinezeichen gewandelt. Sortiert mit Anzahl, und dann numerisch umgekehrt ausgegeben. uniq Der uniq-Befehl entfernt doppelte, aufeinanderfolgende Zeilen. Der Befehl wird häufig als Filter benutzt. Syntax: $uniq [Optionen] Datei1 Nützliche Optionen: -c Gibt jede Zeile mit der Anzahl ihres Auftretens aus -d Gibt nur die doppelt vorkommenden Zeilen aus -i Groß-/Kleinschreibung ignorieren -u Gibt nur die nicht doppelt vorkommenden Zeile aus 4 Token, Type und Frequenliste Bislang haben wir Frequenzliste unbekümmert absteigend sortiert. Dahinter steckt die Annahme, dass die ungewichtete Wrter(man kann diese Liste als Stopwrter nennen, in dem Sinne, dass sie nicht als Key-Word gezählt werden können) sehr hohe Frequenz aufweisen werden. Diese Frequenzliste wurde bei vielen Anwendungen wie Information Retrieval oder Dokument-Clustering angewendet werden. Zipfsches Gesetz oder Poissonwert ist auch eine Beobachtung von dieser Statistik. Während es sich beim Typ um die abstrakte Form handelt, wird jede Realisierung von diesem Typ als Token genannt. So ist ein Fahrzeug ein Typ, worunter jedes realisierte Auto fällt. Ein Grundform vom Verb ist z.B. auch ein Typ, whrend jede realisierte konjugierte Form ein Token ist. In unserer naiven Frequenzliste handelt sich doch nur um die Realisierung von der gleichen Form. Reguläre Ausdrücke und grep Regulärer Ausdruck ist ein Pattern, der eine Menge von Zeichenketten beschreibt. Er ist sehr hilfreich beim Suchen nach einer Zeichenkette mit dem Befehl grep. grep versteht zwei Art reguläre Ausdrücke; grundlegende und erweiterte reguläre Ausdrücke. Zeichenklasse wird zwischen [ und ] angegeben. Falls ˆ am Anfang der Zeichenklasse in ekigen Klammer steht, matcht dieser Ausdruck alles außer dieser Klasse. Es gibt vordefinierte Zeichenklasse. So ist [:alnum:] für alphanumerische Klasse: Diese Klasse in ekigen Klammer - [[:alnum:]] - drückt dieselbe Klasse wie [0-9A-Za-z]. Für weitere vordefinierte Klasse, s. $man grep und oben bei dem Befehl tr. Der Punkt . matcht irgendein Zeichen. Symbol \w ist gleich wie [[:alnum:]], während \W [ˆ[:alnum:]] ist. ˆ und $ matchen jeweils Zeilenanfang und -ende. Regulärem Ausdruck kann ein Iterator folgen: ? das vorhergehende Zeichen kann, muss aber nicht vorkommen + das vorhergehende Zeichen muss mindestens ein mal vorkommen ∗ das vorhergehende Zeichen muss nicht vorkommen, darf aber beliebig oft vorkommen {n} das vorhergehende Zeichen muss genau n-mal vorkommen {n,} das vorhergehende Zeichen muss mindestens n-mal vorkommen {n,m} das vorhergehende Zeichen muss mindestens n-mal, darf aber nicht mehr als m-mal vorkommen Andere Metazeichen bei Suchmustern: \ Abschalten der Sonderbedeutung des folgenden Metazeichen \n Setzt den im n-ten \( \) passenden Text wieder ein \< \> Paßt auf Wortanfang(\<) oder Wortende(\>) | Paßt auf den vor oder nach dem Strich angegebenen Ausdruck ( ) Gruppierung Suchmuster muß in entweder doppelten oder einfachen Anführungszeichen eingeschlossen sein. Sicherer sind die einfachen Anführungszeichen. grep versteht die grundlegenden und erweiterten regulären Ausdrücke: So verstehen die vorderen keine Metazeichen wie ?, +, {, |, (, und ). Stattdessen müssen sie durch Voranstellung des \ Zeichens geschützt werden. Traditionelle egrep unterstützt keine Metazeichen { und}. 5 egrep: erweiterte grep. Spezialoption ’-o’ von egrep gibt nur die betreffende aus. $egrep -o ’backslashw+’ DATEI gibt zum Beispiel nur die Wortfolge aus. Nützliche Optionen beim Suchen: -c Gibt nur die Anzahl der Trefferzeilen aus -e Muster Sucht nach Muster. Funktioniert gleich wie ohne Option, aber schützt Muster -f Datei Liest eine Liste von Suchmustern aus Datei(je eines pro -Zeile) -i Gleichbehandlung von Groß- und Kleinschreibung -l Gibt zusätzlich den Namen der Datei mit dem Treffern aus -n Gibt die Zeile und ihre Zeilennummer aus -r Liest alle Dateien eines Verzeichnisses rekursiv -v Gibt nichtgematchte Zeile aus -w Sucht nur nach dem ganzen Wort Beispiele: Wort ˆWort Wort$ ˆWort$ [Ww]ort W[aeiou]rt W.rt ˆ...$ hallo\> 0\{5,\} [0-9]\{3\} die Zeichenfolge Wort Wort am Amfang einer Zeile Wort am Ende einer Zeile Wort ist der einziger Text auf der Zeile Wort oder wort Der Zweite Buchstabe ist ein Vokal Das Zweite Zeichen ist ein beliebiges Zeichen außer Zeilenvorschub jede Zeile, die genau drei Zeichen(3x8Byte) enthält Sucht nach dem Wort, das mit hallo endet fünf oder mehr Nullen hintereinander Drei-stellige Zahl Das folgende sucht nach dem Palindrom mit dem 5 Buchstaben: grep -e ’ˆ\(.\)\(.\).\2\1$’ Datei oder egrep -e ˆ(.)(.).\2\1$ Datei agrep sgrep diff Vergleicht zwei Textdateien. diff gibt diejenigen Zeilen aus, in denen sich Datei1 und Datei2 unterscheiden. Standardmäßig werden Zeilen aus Datei1 durch ein< markiert und solche aus Datei2 mit >. Falls die beiden Verzeichnisse vergliechen werden, arbeitet diff mit den gleichen Dateinamen. 6 Syntax: $diff [Optionen] Datei1 Datei2 Nützliche Optionen: -b Behandelt wiederholte Leerzeichen wie eins und ignoriert Leerzeichen an Zeilenenden -B Ignoriert Leerzeilen -E Ignoriert den Unterschied zwischen TAB und Leerzeichen -w Ignoriert alle Leerzeichen -i Ignoriert Groß- und Kleinschreibung -I regexp Ignoriert Zeilen, die dem regulären Ausdruck regexp entsprechen -q Es wird nur ausgegeben, ob sich die Dateien untrscheiden -C n Gibt die n Zeilen um die Zeile, in der der Unterschied auftritt, aus -c Gibt die Zeile in einem Kontext von 3 Zeilen aus -U n Gleich wie -C Option, aber noch kompakter -u Gleich wie -c Option, aber noch kompakter -y Erzeugt zweispaltige Ausgabe -r Vergelicht Untervezeichnisse rekursiv Beispiele: $diff -y sz.txt sz 1.txt | less $diff -c sz.txt sz 1.txt | less diff verfügt über viel mehr Funktionen als hier beschrieben. Für die genauere Beschreibung, s. man diff oder info diff diff3 vergleicht drei Dateien und gibt die Unterschiede aus. find Um eine Gruppe von Dateien nach verschiedenen Kriterien zusammenzustellen wird oft der Befehl find genutzt.find durchsucht vom angegebenen Verzeichnis aus abwärts, um Dateien zu finden, die den angegebenen Kriterien entsprechen. Als besonders nützlich Bedingungen sind vorab erwähnt: Syntax: $find [Pfadname] [Bedingungen] Nützliche Bedingungen: -name Muster Sucht nach Dateien, deren Namen mit dem Muster übereinstimmen -links n Sucht Dateien, die n Links haben -atime n Findet Dateien, die vor genau n Tagen gelesen wurden -newer Datei Findet Dateien, die später als Datei modifiziert wurden -group gname Sucht Dateien, die zu der mit gname bezeichneten Gruppe gehören -print Gibt die gefundenen Dateien und Verzeichnisse mit ihren kompletten Pfadnamen aus -size n Sucht Dateien, die n Blöcke enthalten -type c Sucht Dateien vom Typ c -maxdepth n Beschränkt die Tiefe der Suche auf die angegebene n von Verzeichnisebenen Beispiele: 7 $find ../ -name ’*.perl’ $find $HOME -links 5 $gzip ‘find . \! -name ’*.gz’ -print‘ Das Programm findet und komprimiert Dateien, deren Namen nicht mit .gz enden. $find . -name ’kt[0-9]’ Das Programm findet Dateien wie kt1, kt2,... UTF-8 und Locale - 4 Byte UTF-8 ist kompatibel mit ASCII und ISO-8859-1, und Variabel an Lnge von 1 Locale Locale beeinflußt die sort und grep. Aufruf $ locale für eingestellte locale $ locale -a für alle locales locale setzen locale wird wie folgt gesetzt LANG=”WERT” für globale Einstellung LC ***=”WERT” für einzele Einstellung export LC ***=”WERT” für dauerhafte Einstellung für sh, ksh, bash, zsh setenv für csh, tsch LC ***=”WERT” PROGRAMM für das betreffende Programm locale Umgebungsvariable LANG zuständig LC CTYPE zuständig LC COLLATE zuständig LC NUMERIC zuständig LC TIME zuständig LC MONETARY zuständig LC MESSAGES zuständig LC ALL zuständig für für für für für für für für die lokale Kategorie der Sprache die Zeichenklassen und Klein- und Großkonvertierung Collation das lokale nummerische Format die lokale Zeit- und Datumsformat die lokale Kategorie des Banknoten-relevanten nummerischen Formats positive und negative Nachrichten alle lokale Katogorien Konvertierung zwischen Kodierungen iconv geschrieben von Ulrich Drepper Aufruf mit Option $ man iconv 8 $ iconv -l gibt alle Zeichensätze aus $ iconv -f iso-8859-1 -t utf-8 -o file.utf8 file.iso recode geschrieben von Franc, ois Pinard Nützliche Optionen $ man recode $ info recode $ recode -l gibt alle Zeichensätze aus $ recode -l KODIERUNG gibt den betreffenden Zeichensatztabelle aus $ recode -lf KODIERUNG gibt den betreffenden Zeichensatz mit dem Zahlenwert und Namen aus $ recode -f l1..u8 DATEI zwingt die Konvertierung recode zwischen Betriebssystemen recode mac recode mac..l1 recode mac..Latin-1 recode mac/CR..Latin-1 recode macintosh..ISO 8859-1 recode macintosh/CR..ISO 8859-1 file entscheidet den Dateityp Nützliche Optionen $ file -i DATEI Mime Type Ausgabe des Dateityps $ file -z Zip DATEI liest die gezippte Datei und gibt Dateityp aus Konkordanz erstellen ptx ptx arbeitet mit Latin1 Optionen -f Klein- Groschreibung ignorieren -i Wörter in der Datei ausgeschlossen -o Nur Wörter in der Datei -W Wort RE -A Auto-Referenz -w Breite bestimmen -g Zahl der Leerzeichen -T Tex-Format Beispiel ptx -f -A -w 120 -W ’noch’ | less grep –colour=always Optionen -A n Kontext nach dem Matchen -B n Kontext vor dem Matchen -C n Kontext vor und nach dem Matchen 9 Beispiel egrep -i -n –colour=always ’noch’ | less -R cut Schneidet bestimmte Spalten oder Felder aus den angegebenen Dateien aus. Bei den folgenden Optionen wird als Liste eine Folge von ganzzahligen Wert akzeptiert. Einzelne Werte werden durch Kommata voneinander getrennt, Bereiche können durch einen Bindestrich angegeben werden. Syntax: cut [Optionen] [Dateien] Nützliche Optionen: -b Byte-Liste Legt eine Liste von Byte-Positionen fest -c Zeichen-Liste Legt Zeichen in Position aus der Zeichen-Liste fest -dc Wird zusammen mit -f benutzt, um den Feldtrenner c festzulegen -f Liste Gibt die in der Liste festgelegte Felder aus -n Multi-Byte-Zeichen nicht trennen Default Delimiter ist der Tabulator. Beispiele: $cut -d: -f1,5 /etc/passwd Extrahiert Benutzernamen und tatsächliche Namen aus der Datei /etc/passwd. Als Delimiter wurde der Doppelpunkt ausgenutzt. Das folgende Programm gibt die Wortliste aus den Feldern 2 bis Ende jeder Zeile nach der Eingabereihe unsortiert aus: $cat sz.txt | tr ’[:punct:]’ ’\012’ | tr -s ’\n’ | tr -s ’ ’ | tr ’ ’ ’\t’ | sed ’s/ˆ *//g’ | sed ’s/$/ /’ | tr ’ ’ ’\t’ | cut -f 2- | tr ’\t’ ’\’n’ | less Zuerst werden alle Interpunktionen durch ein Newlinezeichen ersetzt. Durch Option -s werden alle mehrfache Newline- und Leerzeichen zu einem einzigen Newline- und Leerzeichen gewandelt. Mit der Stream-Editor sed werden alle beginnenden Leerzeichen gelöscht, und am Ende ein Leerzeichen extra hinzugefügt, um ein Feld erweitern zu können. Danach wird jedes Leerzeichen durch ein Tabulator ersetzt, um den Default-cut-Befehl nutzen zu können. Beim cut-Befehl werden alle Felder außer dem 1. Feld extrahiert. Jedes Wort wird zeilenweise ausgegeben mit einer Extra-Leerzeile aus dem Originaltext. paste Fügt die Zeile von zwei oder mehreren Dateien, getrennt durch einen Delimiter (Default ist der Tabulator), in Spalten zusammen. Syntax: paste [Optionen] [Dateien] Nützliche Optionen: 10 -dZeichen -s Ersetzt einen Dateinamen durch die Standardeingabe Trennt die Spalten mit Zeichen anstelle eines Tabulators. Fügt fortlaufende Zeilen zu einer Datei zusammen Beispiele: $paste x y z > Datei Erzeugt eine dreispaltige Datei aus den Datei x,y und z. tail gibt die Zeilen, gezhlt vom Dateiende, aus. Syntax: tail [Option] [Datei] Beispil: $tail -10 DATEI gibt die die letzte 10 Zeile aus. tail kann aber auch die Zeile, gezhlt vom Dateibeginn, aus. In diesem Fall wird die Option + statt verwendet. Beispiel: $tail +2 DATEI gibt die ganze Datei ab 2. Zeile aus. Stream Editor Es kommt oft vor, dass man die Datei editieren muss. Die folgende Scriptsprachen sind fürs Texteditieren sehr gut geeignet. Sie können sowohl Dateien oder durch | übertragene STDIN bearbeiten. sed ist meist fr den PatternMatching und die Substitution eingesetzt. Syntax: sed [Option] [Datei] Optionen: -e script -f script-file -r extended RE Beispiel: $cat sz.txt | sed -e ’s/a/b/g’ ersetzt alle a’s durch b’s. 11 perl ist eine beliebte StreamEditor wie sed, arbeitet zeilenweise. Syntax: perl -ne script DATEI Syntax: perl -pe script := perl -ne script + print Beispiel: $cat sz.txt | perl -pe ’s/a/b/g’ gleich wie sed-Beispiel awk ist auch PatternProcessing StreamEditor. Syntax: awk [Option] [Datei] Standard-Optionen: -Ffs: Feldtrenner -v var=value: Wertzuweisung awk ist besonders geeignet für die Feld getrennte DATEI. Beispiel: $awk -F: ’print $1; print $2; print $3’ /etc/passwd gibt die 1., 2. und 3. Felder aus der Datei /etc/passwd aus. $0 bedeutet bei awk die ganze Zeile. ngramme erstellen Ngramme sind für viele Korpus-orientierte Linguisten sehr sinnvoll ausgenutzt: für die Kollokationen oder Mehrwortlexeme. Direkt aus dem Text kann man sie am einfachsten mit StreamProzessor awk erstellen. Aus der tokenisierten Liste kann man am einfachsten mithilfe von tail und paste erstellen. Beispiel aus dem Text: (Bigramme) $cat sz.txt | tr -s ’[:punct:]’ ’ ’ | awk -F’ ’ ’for($i=0;$i<NF;$i++)print $i, ($i+1)’ Beispiel aus zwei identisch tokenisierten vertikalen Dateien aus einem Text: (Bigramme) $paste -d 9977.tok ¡(tail +2 9977.tok) 3 flex flex ist ein Tool für schnelle Generierung von Scanner, der die lexikalischen Patterns im Text erkennt. flex kann entweder aus einer Datei oder von der Standardeingabe lesen. Das Tool nimmt als Input die reguläre Ausdruck und die Regel auf, und generiert als Alsgabe die C Quellkode. Weil flex aus Regulären Ausdrücke einen deterministischen Automaten erstellt, ist es sehr schnell. 12 Format von Inputdatei flex Inputdatei hat 3 durch %% getrennte Teile. Davon sind die Definitionsund UserCodeteil optional. defintion %% rules %% user code Definitionteil hat zwei Teile: name defintion Beispiel: DIGIT ID ZAHL [0-9] [a-z][a-z0-9] {DIGIT}+ Regelteil hat auch 2 Teile: pattern action Beispiel: DIGIT ID {ECHO;} {ECHO; printf(ID);} UserCode ist ein C main() Programm, auf das wird verzichtet. Wenn man die Eingabedatei fr die Generierung von C Quellkode geschrieben hat, muss man sie mit der Erweiterung .l speichern und durch den Befehl im SHELL: $flex -oeingabedatei.c eingabedatei.l in C Code umgewandeln. Danach muss sie wie normale C Code mit C-Compiler kompliert werden. Dabei muss auch die flex-Bibliothek eingebunden werden. $gcc -oeingabedatei eingabedatei.c -lfl Dann ist sie anwendungsbereit: 13 Ausführen von Programm ’eingabedatei’ auf eine Textdatei: $cat DATEI | ./eingabedatei Reguläre Ausdrücke Patterns sind die erweiterten regulären Ausdrücke. Quantoren sind gierig. Kennt Zeichenklasse(s. oben) und Look-Ahead Operator(’/’), aber nicht utf-8 fähig. Input wird Reihen nach gematcht ’x’ ’.’ ’[xyz]’ ’[a-z]’ ’[â-z]’ ’r*’ ’r+’ ’r?’ ’r|s’ ’r/s’ ’r̂’ ’r$’ matcht ein ’x’ matcht irgendein Zeichen ausser Newline Zeichenklasse: entweder x, y, oder z Zeichenklassen-Bereich: ein Zeichen aus dem Bereich a bis z Negative Zeichenklasse: ein Zeichen ausser a bis z zero oder mehr ’r’, wobei ’r’ irgendein regulärer Ausdruck ist ein oder mehr ’r’, wobei ’r’ irgendein regulärer Ausdruck ist zero oder ein ’r’ entweder ’r’ oder ’s’ ein ’r’, aber gefolgt von ’s’ ’r’ am Anfang der Zeile ’r’ am Ende der Zeile action Jedes Pattern hat eine entsprechende Aktion, die eine beliebige C Statement sein kann. Das Pattern endet beim ersten nicht-escaped Leerzeichen; die Reste der Zeile sind Aktion fürs Pattern. Es kann auch /* C-Kommentar*/ eingebettet sein. Spezial Anweisung bei Aktion: ’ECHO’ kopiert yytext(gematchte Texte) auf die Scanner-Ausgabe: Wiederausgabe des Textes 14