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