Mit einem geeignet eingebundenen "grep" (beispielsweise "-exec fgrep -q \"<body>\" {} \;") kannst Du weiter einschränken, welche Files Du bearbeiten mußt und bei welchen das Anfassen vergebliche Liebesmüh' wäre.
Naja, immerhin müssen die Files auch damit geöffnet werden, um festzustellen, ob eine Ersetzung vorgenommen werden muß oder eben nicht. Reingucken muß ich eh. Dann mach' ich's doch besser auf und durchsuche es direkt. Wird was gefunden --> ersetzen, und die Datei speichern. Wird nix gefunden --> weiter mit nächster Datei. Oder hab' ich was nicht verstanden?
[...] Die gefundenen Namen kannst Du dann in ein "xargs" pipen, welches einen "sed" (beispielsweise "sed -e \ 's/<body>/
/g'") mit geeigneten Umleitungen aufruft.
Ui ui ui, Ge-grep-pe und ge-pipe ohne Ende. Brrrr ... ;-)
[...] ähnlicher Overkill. "perl" für das finden der zu bearbeitenden Files wäre IMHO ebenfalls und erneut Overkill.
Hm... Wenn ein Skript doch mal da ist, kann man's immer wieder verwenden. Einfach nur die Strings ändern, und laufen lassen. Mein Vorschlag: (Skript als "replace.pl" speichern, $search und $replace anpassen und mit "perl replace.pl" in dem Verzeichnis laufen lassen, das durchsucht werden soll) ----- snip ------------------------- #!/usr/bin/perl ############################################### # # Skript "replace.pl" durchsucht rekursiv alle # Dateien und Verzeichnisse, und ersetzt # gegebenenfalls $search durch $replace # ############################################### # # Such-/Ersetzungsstrings $search = "irgendwas"; $replace = "das soll rein"; # ############################################### # und hier, welche Dateiendungen gesucht # werden sollen (Wildcards sind möglich) $extension=".htm*"; # ############################################### use Time::Local; use File::stat; use File::Find; $rtot=0; print "\nScanning $extension files ... \n\n"; @ARGV = ('.') unless @ARGV; find(\&filesearch, @ARGV); print "\n$i $extension files found, $rtot replacements made!\n\n"; sub filesearch { my (@source,@target,@file)=(); $tmp = $File::Find::name;(@file)=split(/\//,$tmp); if (-f && $file[-1] && $file[-1] =~ /$extension/ && $file[-1] !~ /^replace\.pl$/){ $i++; print " $i: Opening $tmp ... "; open SOURCE,"<$file[-1]"; @source=<SOURCE>; close SOURCE; $r=0; foreach (@source) { if ($_ =~ /\Q$search\E/){ $r++;$rtot++; $_ =~ s/$search/$replace/g; } push @target,$_; } close TARGET; if ($r > 0) { open TARGET, ">$file[-1]"; print "--> replacements: $r\n"; print TARGET @target; close TARGET; } else { print "nothing to do\n"; } } } ----- snap ------------------------- Das Skript ist bei mir schon seit Jahren im Einsatz, und hat mir schon ziemlich viel Arbeit abgenommen. Wichtig ist, das Skript wirklich als "replace.pl" abzulegen. Heißt es anders, durchsucht es sich selber. Wer will kann ja noch diese nette "basename"-Abfrage einbauen. Ciao Dirk