Heike Zinsmeister perl -e ’Anweisungen’ # -e executable bei langen ‘Einzeilern’ ggf. Zeilenumbrauch mit ‘ ’ Windows: perl -e "Anweisungen" (ggf. Stringmarkierung siehe perlrun-Manpage Kommandozeileneingabe index-Funktion rindex-Funktion substr-Operator grep-Operator map-Operator Ausführung von Perl-Kommandos direkt von der Kommandozeile, ohne Programmdatei IMS Kommandozeileneingabe Einführung in Perl Kommandozeileneingabe etc. ‘"’ schützen Heike Zinsmeister IMS Beispiel: %perl -e ’print "Dies ist ein Einzeiler\n";’ Dies ist ein Einzeiler # Unter Windows: C:\> perl -e "print \"Dies ist ein Einzeiler unter Windows\n\";" Kommandozeileneingabe IMS 1 Heike Zinsmeister Kommandozeileneingabe IMS 2 Heike Zinsmeister Kommandozeileneingabe – Optionen Kommandozeileneingabe – Bsp (1) Perl, 19.12.03 Perl, 19.12.03 Zeilen umdrehen -e ausführbar Zeilen mit Zeilennummer ausgeben -w gibt Warnungen aus % perl -e ’$i=1;while(<>){print "$i: $_";$i++}’ dateiname.txt -n erzeugt while-Schleife um Programm führenden Whitespace-Zeichen entfernen -p wie -n mit zusätzlicher print $ Funktion in Schleifenblock Datei in Großbuchstaben ausgeben -l entfernt n vorübergehend $_;}’ dateiname.txt -i bearbeitet Dateien, die durch (Beispiele von Bernd Schamberger http://www.perlboard.de/perlguide/Kap20.html) Perl, 19.12.03 Kommandozeileneingabe 3 eingelesen werden, wenn Extension gegeben, erzeugt es Backup-Datei Perl, 19.12.03 % perl -e ’while(<>){print uc % perl -e ’while(<>){s/^\s+//g;print;}’ dateiname.txt % perl -e ’print reverse <>;’ dateiname.txt Kommandozeileneingabe 4 Heike Zinsmeister IMS IMS Kommandozeileneingabe – Bsp (2) Noch ein Beispiel % perl -p -e ’$_ = uc $_;’ test.txt %$ perl -p -i.bak -w -e ’s/Randall/Randal/g’ fred*.dat Vergleiche Vergleiche # /usr/bin/perl -w @ARGV = glob "fred*.dat"; while (<>) { s/Randall/Randal/g; print; } } Kommandozeileneingabe IMS 5 Heike Zinsmeister Perl, 19.12.03 while (<>) { $_ = uc $_; print; Perl, 19.12.03 Heike Zinsmeister Kommandozeileneingabe IMS index-Funktion (1) Heike Zinsmeister index-Funktion - Beispiel $wo = index ("Abrakadabra", "abra"); print "$wo\n"; findet erstes Match von Substring gibt nullbasierten Integer-Wert zurück für Position des 1. Buchstabens des Substrings :> :> # A b r a k a d a b r a # 0 1 2 3 4 5 6 - - - - $wo = index ("abrakadabra", "arba"); print "$wo\n"; 6 # Tippfehler bei ’arba’ wenn kein Match gefunden wird: -1 :>-1 Syntax: $wo = index($grosser string, $substring); Perl, 19.12.03 Kommandozeileneingabe 7 Perl, 19.12.03 Kommandozeileneingabe 8 Heike Zinsmeister IMS IMS optionaler 3. Parameter: Suchbeginn index-Funktion (2) Syntax: index-Funktion (2) - Bsp $wo =0; $n = 0; $wo = index($grosser string, $substring, Suchbeginn); while ($wo !~ -1){ $wo = index ("abrakadabra", "ab", $wo+$n); print "$wo\n" ; $n=1; } Default für Suchbeginn = 0 :>0 meist in Schleife eingebaut :>7 :>-1 Kommandozeileneingabe IMS 9 Heike Zinsmeister Perl, 19.12.03 Perl, 19.12.03 Heike Zinsmeister Syntax: Heike Zinsmeister $wo = length "abrakadabra"; $n = 0; while ($wo !~ -1){ $wo = rindex ("abrakadabra", "ab", $wo-$n); print "$wo\n" ; $n=1; } :>7 :>0 :>-1 Kommandozeileneingabe 10 rindex-Funktion Beispiel $wo = rindex($grosser string, $substring, Suchbeginn); Perl, 19.12.03 Kommandozeileneingabe IMS rindex-Funktion findet das letzte Vorkommnis eines Suchstrings # a b r a k a d a b r a - # a b r a k a d a b r a - # nicht (mehr) gefunden 11 Perl, 19.12.03 # a b r a k a d a b r a -# a b r a k a d a b r a - # nicht (mehr) gefunden Kommandozeileneingabe 12 Heike Zinsmeister IMS IMS substr-Operator (1) Heike Zinsmeister $teil = substr ("Fred J. Feuerstein", 8, 5); $teil = substr ("Fred J. Feuerstein", 13, 1000); # ergibt "Feuer" # ergibt "stein" zwei Argumente (+ zwei optionale Argumente) $teil = substr ("Fred J. Feuerstein", 13); # ergibt "stein" – String – Startposition positive Zahl gezählt negative Zahl gezählt – Länge (optional) – Ersetzung $teil = substr ("Fred J. Feuerstein", -3); $teil = substr ("Fred J. Feuerstein", -3, 2); # ergibt "ein" # ergibt "ei" Zeichenposition vom Anfang des Strings Zeichenposition vom Ende des Strings Kommandozeileneingabe IMS 13 Heike Zinsmeister Perl, 19.12.03 Perl, 19.12.03 ermittelt Teil (= Substring) eines größeren Strings substr-Operator (1) – Bsp IMS 14 Heike Zinsmeister substr-Operator (3) ausgewählter Teil kann verändert werden substr-Operator (2) Kommandozeileneingabe muss dazu in Variable stehen Verknüpfung von substr und index $langer_string = "Fred J. Feuerstein"; $teil = substr ($langer_string, index ($langer_string, "s")); # ergibt "stein" $string = "Fred J. Feuerstein"; substr ($string, 0, 7) = "Wilma"; print "$string\n"; # # # # # # # ersetzt Fred J. 0123456 durch Wilma ergibt: :>Wilma Feuerstein Oder: $geloeschter_string = substr ($string, 0, 7,"Wilma"); # Fred J. print "$string\n"; # Wilma Feuerstein Perl, 19.12.03 Kommandozeileneingabe 15 Perl, 19.12.03 Kommandozeileneingabe 16 Heike Zinsmeister IMS IMS filtert Elemente aus einer Liste Syntax: Operator – Block mit $ – Liste für jedes Listenelement wird Block 1x ausgewertet Operation auf Teilstring beschränken vgl. Unix-Hilfsprogramm grep mittels Bindungsoperator = grep-Operator (1) Beispiel: Einlesen von ungeraden Zahlen in Array substr-Operator (4) konventionell: $string = "Fred J. Feuerstein"; substr ($string, -10) =~ s/e/E/g; # ergibt # :>Fred J. FEuErstEin Perl, 19.12.03 Kommandozeileneingabe IMS 17 Heike Zinsmeister Perl, 19.12.03 print "$string\n"; Kommandozeileneingabe IMS 18 Heike Zinsmeister grep-Operator (3) zeilenweises Einlesen aus Datei my @ungerade_zahlen; foreach (1..1000) { if ($_ % 2) { push (@ungerade_zahlen, $_) } } hier: groß- und kleinschreibungsunabhängige Suche nach dem Wort Perl grep-Operator (2) Heike Zinsmeister liest Zeilen mit Match in Array zeilen suche ein (Mit Newlinezeichen) dasselbe mit grep: my @ungerade_zahlen = grep { $_ % 2} (1..1000); open (FILE, "test.txt") or die "$!"; my @zeilen_suche = grep { /\bperl\b/i } <FILE>; wenn Filter einfacher Ausdruck, weitere Vereinfachung my @zeilen_suche = grep Perl, 19.12.03 Kommandozeileneingabe 19 Perl, 19.12.03 /\bperl\b/i, <FILE>; Kommandozeileneingabe 20 Heike Zinsmeister IMS IMS map-Operator (1) Heike Zinsmeister map-Operator (2) map { printf "%s\n", &delete_multi_index($_) } <FILE>; sub delete_multi_index { chomp( my $v = $_[0]); $v =~ s/\\index\{[pl]\}\{[^\}]*\}//g; return $v ; Beispiel: Lösche Muster index analoge Syntax zu grep: Operator – Block mit $ – Liste wandelt Elemente aus einer Liste um open (FILE, "test.txt") or die "$!"; {[pl] } {[ }]* } } Einschub: Zeileneingabe index{p}{Chomsky} index{l}{German} alternativ (und kürzer): :> perl -l -p -e ’s/\\index\{[pl]\}\{[^\}]*}//g’ test.txt :> Kommandozeileneingabe IMS 21 Heike Zinsmeister Perl, 19.12.03 Perl, 19.12.03 Kommandozeileneingabe IMS grep versus map (1) 22 Heike Zinsmeister grep versus map (2) map ersetzt $ mit letztem Ausdruck aus Block @ungerade_zahlen = map {"Tautologie"} (1..5); grep gibt Wert von $ zurück, wenn Block wahr ist Beispiele foreach $x (@ungerade_zahlen){ print "$x\n"; } :>Tautologie :>Tautologie :>Tautologie :>Tautologie :>Tautologie @ungerade_zahlen = grep {"Tautologie"} (1..5); foreach $x (@ungerade_zahlen){ print "$x\n"; } :>1 :>2 :>3 :>4 :>5 Perl, 19.12.03 Kommandozeileneingabe 23 Perl, 19.12.03 Kommandozeileneingabe 24