linux-l: replace rekursiv

Jens Dreger jens.dreger at physik.fu-berlin.de
Di Apr 18 02:01:21 CEST 2000


On Tue, Apr 18, 2000 at 12:02:42AM +0200, Steffen Solyga wrote:
> > weiss jemand ne 'gute' methode um in einem directory in jedem (text)file einen
> > string mit einen anderen zu ersetzen?
> > im emacs? sed?
> 
> Als alter Perlhasser würde ich folgendes vorschlagen:
      ================

Aber warum denn das ? Dabei geht das doch auch in Perl so einfach:

----------------8<---------------------
#!/usr/local/bin/perl -w

system(
 'for i in `find . -type f`; do echo "Processing $i";
  file $i | grep text > /dev/null 2>&1 && 
  (echo $i; cp -p $i /tmp/file;
     sed "s/alter string/neuer string/g" /tmp/file > $i;
     touch -r /tmp/file $i; ); 
  done; rm -f /tmp/file'
)
-------------------8<-------------------------
 
> $ for i in `find . -type f`; do echo "Processing $i"; file $i | grep text > /dev/null 2>&1 && (cp -p $i /tmp/file; sed "s/alter string/neuer string/g" /tmp/file > $i; touch -r /tmp/file $i; ); done
> $ rm -f /tmp/file
> 
> Sieht doch abgefahren aus, oder?

Stimmt. Hast Du das selbst aus der Keilschrift uebersetzt, oder war das
babelfish ?

Allerdings hat Deine Version den Vorteil, dass sie mit beliebig vielen
Files klarkommt. Bei "perl -pi -e 's/blah/blub/g' <files>" ist
natuerlich irgendwann Schluss, wenn die Kommandozeile ueberlaeuft...

SCNR,

Jens



Mehr Informationen über die Mailingliste linux-l