Als Beispiel schauen wird uns zwei Versionen eines Perl-Skripts an.
1: #!/usr/bin/perl 2: 3: # Dieses Programm teilt zwei Zahlen durcheinander 4: 5: # Eingabe 6: print "Zähler: "; 7: $z = <STDIN>; 8: chomp($z); 9: print "Nenner: "; 10: $n = <STDIN>; 11: chomp($n); 12: 13: # Verarbeitung 14: $erg = int($z / $n); 15: $rest = "Rest ". ($z % $n); 16: 17: # Ausgabe 18: print "$z / $n = $erg $rest\n"; 19: 20: exit(0);
1: #!/usr/bin/perl 2: 3: # Dieses Programm teilt zwei Zahlen durcheinander 4: # Version 2 5: 6: # Eingabe 7: print "Zähler: "; 8: $z = <STDIN>; 9: chomp($z); 10: print "Nenner: "; 11: $n = <STDIN>; 12: chomp($n); 13: 14: # Verarbeitung 15: # Verarbeitung nur, wenn der Nenner ungleich Null ist 16: if ($n != 0) { 17: $erg = int($z / $n); 18: $rest = "Rest ". ($z % $n); 19: } else { 20: $erg = "unendlich"; 21: $rest = ""; 22: } 23: 24: # Ausgabe 25: print "$z / $n = $erg $rest\n"; 26: 27: exit(0);
diff liefert uns nun die Unterschiede der beiden Skripte.
tapico@defiant:~/perl > diff div.pl div2.pl 3a4 > # Version 2 14,15c15,22 < $erg = int($z / $n); < $rest = "Rest ". ($z % $n); --- > # Verarbeitung nur, wenn der Nenner ungleich Null ist > if ($n != 0) { > $erg = int($z / $n); > $rest = "Rest ". ($z % $n); > } else { > $erg = "unendlich"; > $rest = ""; > }
Manuell können mit diesen Informationen nun die Änderungen an der Datei div.pl durchgeführt werden.
Da dies bei größeren Projekten doch problematisch ist, kann auch ein Skript für den Editor ed erstellt werden.
tapico@defiant:~/perl > diff -e div.pl div2.pl 14,15c # Verarbeitung nur, wenn der Nenner ungleich Null ist if ($n != 0) { $erg = int($z / $n); $rest = "Rest ". ($z % $n); } else { $erg = "unendlich"; $rest = ""; } . 3a # Version 2 .
Wenn Sie die Ausgabe als Datei gespeichert haben, kann nun jemand anders mit dem Editor ed die alte Datei (div.pl) mit dem Patch (hier die Datei div.patch) bearbeiten und daraus die neue Datei (div2.pl) erstellen.
barclay@enterprise:~/projekt > (cat div.patch; echo w div2.pl) | ed - div.pl
Dies setzt aber voraus, daß an der alten Datei nichts geändert worden ist. Daher gibt es zwei andere Formate, die mehr Sicherheit beim Patchen versprechen.
tapico@defiant:~/perl > diff -c div.pl div2.pl *** div.pl Sun Sep 23 14:36:48 2001 --- div2.pl Sun Sep 23 14:36:12 2001 *************** *** 1,6 **** --- 1,7 ---- #!/usr/bin/perl # Dieses Programm teilt zwei Zahlen durcheinander + # Version 2 # Eingabe print "Zähler: "; *************** *** 11,18 **** chomp($n); # Verarbeitung ! $erg = int($z / $n); ! $rest = "Rest ". ($z % $n); # Ausgabe print "$z / $n = $erg $rest\n"; --- 12,25 ---- chomp($n); # Verarbeitung ! # Verarbeitung nur, wenn der Nenner ungleich Null ist ! if ($n != 0) { ! $erg = int($z / $n); ! $rest = "Rest ". ($z % $n); ! } else { ! $erg = "unendlich"; ! $rest = ""; ! } # Ausgabe print "$z / $n = $erg $rest\n";
tapico@defiant:~/perl > diff -u div.pl div2.pl --- div.pl Sun Sep 23 14:36:48 2001 +++ div2.pl Sun Sep 23 14:36:12 2001 @@ -1,6 +1,7 @@ #!/usr/bin/perl # Dieses Programm teilt zwei Zahlen durcheinander +# Version 2 # Eingabe print "Zähler: "; @@ -11,8 +12,14 @@ chomp($n); # Verarbeitung -$erg = int($z / $n); -$rest = "Rest ". ($z % $n); +# Verarbeitung nur, wenn der Nenner ungleich Null ist +if ($n != 0) { + $erg = int($z / $n); + $rest = "Rest ". ($z % $n); +} else { + $erg = "unendlich"; + $rest = ""; +} # Ausgabe print "$z / $n = $erg $rest\n";
Diese beiden Formate, wie auch die anderen, können mit dem Befehl patch die Veränderung durchführen.
barclay@enterprise:~/projekt > patch < div.c.patchDie im Patch angegebene Datei (div.pl) ist nun verändert worden.
Notizen:
Notizen:
Textverarbeitung und Textfilter
Sollte eine Aufgabe zu einer Fehlermeldung führen, kann das von mir gewollt sein! Prüfen Sie aber dennoch, ob Sie keinen Tippfehler gemacht haben, und ob die Voraussetzungen wie in der Aufgabenstellung gegeben sind. Auch sollten keine Verzeichniswechsel ausgeführt werden, wenn dies nicht ausdrücklich in der Aufgabe verlangt wird! Notieren Sie die Ergebnisse auf einem seperaten Zettel.
rm -rf *
aus.
~/passwd.sort
.
~/passwd.reverse
.
~/passwd.sort
und ~/passwd.reverse
.
Notizen: