#!/usr/bin/perl -w $usage = qq{usage: replace [-v] s/pat/repl/ [files...] \t(c) 2001 hellweg\@snark.de apply replacement to every line of every file (or stdin) License to use, modify and redistribute granted to each and every lifeform on this planet (as long as credit to hellweg\@snark.de remains). No guarantee that 'replace' does or does not perform the way you want... } ; my $par = shift || 0 ; my $verbose = 0 ; while($par eq "-v") { $verbose++ ; $par = shift || 0 ; } if(!$par) { print $usage; exit(-1) ;} my $oper = $par ; $par = shift || 0 ; if($par) { while($par) { my $count = 0 ; my $tmpName = "$par.$$.$count" ; while(-f $tmpName) { $count++; $tmpName = "$par.$$.$count" ; } open(WH, ">$tmpName") || die "can not write to $tmpName" ; open(RH, "<$par") || die "can not read from $par" ; my $repCount = 0 ; while() { $repCount++ if(eval $oper) ; print WH ; } close RH ; close WH ; if($repCount) { unlink $par ; rename $tmpName, $par ; } else { unlink $tmpName ; } if($verbose) { print("$par: $repCount repl\n") ; } $par = shift || 0 ; } } else { # use stdin/out... my $repCount = 0 ; while(<>) { $repCount++ if(eval $oper) ; print ; } if($verbose) { print("$par: $repCount repl\n") ; } }