Einführung in Perl Kommandozeileneingabe etc

Werbung
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
Herunterladen