linux-l: Perl mal wieder...

Oliver Bandel oliver at first.in-berlin.de
Di Feb 8 21:14:58 CET 2000


Hi!

On Mon, 7 Feb 2000, Carsten Wartmann wrote:

> Hi,
> 
> ich kann Perl immer noch nicht so richtig leiden,

Wird sich bestimmt bald ändern... ...hoffe ich jedenfalls,
ist nämlich richtig schnuckelig. :-)


> jetzt habe ich eine
> Datei, in der ich per Perl (genauer ePerl) eine Zeile austauschen

Was ist denn ePerl?

> möchte und dann eine neue Datei erzeugen will. 
> Normalerweise ist es die erste Zeile, aber möglicherweise ist
> auch mal ein "\n" zu viel in der Datei.

Was kümmert das "\n", wenn man Perl hat.
Wichtig ist, die entsprechende Zeile zu lokalisieren.
Dann muß man nur noch den alten gegen neuen Text austauschen.

(Aber ich vermute, man kann Dein Problem auch mit ed
recht gut lösen.)
> 
> z.B.
> 
> #include "layout.inc" SELECT="tutor"
> 
> <title "Test-Tutorial">
> <tutorial ttitle="Test Tutorial" 
>           autor="<me>" 
>           level="Einsteiger"
>           abstract="Dies ist nur ein Test für den
> tutorial-tag. Erwarten Sie hier bitte keine sinnvollen Aussagen oder
> gar einen Lerneffekt. Dumm geboren, nix dazugelernt, die Hälfte wieder 
> vergessen...">
> 
> <step title="Test">
> Bla Bla Bla. Blub Bla Bla. Bla Bla Bla. Blub Bla Bla. Bla Bla
> [···]
> </tutorial>
> 
> die Zeile #include "layout.inc" SELECT="tutor" soll dann in der neuen
> Datei durch #include "print.inc" SELECT="tutor" ausgetauscht werden...


------------------------------
#!/usr/bin/perl # Wenn's denn Dein Pfad ist...

$alt = 'layout.inc';
$neu = 'print.inc';
$key = "\#include \"$alt\"";

while(<>)
{
  s/$alt/$neu/ if /$key/o;
  print;
}
------------------------------

Das Ergebnis in neues File umleiten. Der mißtrauische,
Perl-fremdelnde ;-) User kontrolliert das Ergebis erst
mal mit "|head"....

Man kann mit Perl auch, wenn man's drauf anlegt, direkt in der einen
Datei Ändern und dann auch automatisch ein Backup-File anlegen lassen.

=> man perlrun 
   (Option "-i")

Tschüß,
   Oliver

P.S.: Man könnte die Performance des obigen Scriptes sicherlich
      noch erhöhen, wenn man die Substitution nur einmal ausführt,
      und dann nur noch print-Anweisungen in der Schleife hat...
      (Voraussetzung, man ersetzt nur einmal...was anzunehmen ist.)
      ...naja, kann man ja, wenn man will, noch optimieren.
      Aber eigentlich sollte das schnell genug sein.



Mehr Informationen über die Mailingliste linux-l