on Wed, Sep 17, 2003 at 08:08:26AM +0800, csj ([EMAIL PROTECTED]) wrote: > At Tue, 16 Sep 2003 17:08:51 +0200, > Matthias Czapla wrote: > > > > On Tue, Sep 16, 2003 at 07:39:39AM -0700, Ric Otte wrote: > > > Hi, I would like to run all of the files in some directories > > > through sed, in order to edit the files. I can do it for > > > individual files by typing: cat filename|sed command>filename > > > But that requires me to run that command for each file. I > > > was wondering if anyone could 1) give me a reference to a > > > simple bash tutorial that will explain how to set up a script > > > to do things like this, > > > > http://www.tldp.org/HOWTO/Bash-Prog-Intro-HOWTO.html > > > > > and 2) tell me how to do it. > > > > for f in *; do tmp=`tempfile`; cat $f | sed command > $tmp ; mv $tmp $f; done > > Is there anything intrinsically wrong with: > > find directory -name "*.foo" | xargs sed -i -f sed_script
Well: - It outputs everything to stdout, rather than a named file for each input. - You need to restrict the number of input files with 'xargs -n 1' - You could run into problems with filenames containing embeded IFS characters. "-print0 / -0" are useful arguments. Personally, I'd do it as: for f in $( find path -name \*.foo ) do sed -e 'stuff' < "$f" > "$f.tmp" && mv "$f.tmp" "$f"; done Peace. -- Karsten M. Self <[EMAIL PROTECTED]> http://kmself.home.netcom.com/ What Part of "Gestalt" don't you understand? SCO is the thief who puts a gun to his own head and says give me your money or I'll shoot. -- Bruce Perens http://slashdot.org/comments.pl?sid=56225&&cid=5456337
pgp00000.pgp
Description: PGP signature