[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: sed, bash script



on Wed, Sep 17, 2003 at 08:08:26AM +0800, csj (csj@zapo.net) 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 <kmself@ix.netcom.com>        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

Attachment: pgpUW8gUFDCOZ.pgp
Description: PGP signature


Reply to: