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

Re: sed, bash script



At Wed, 17 Sep 2003 11:40:31 +0100,
Karsten M. Self wrote:
> 
> on Wed, Sep 17, 2003 at 08:08:26AM +0800, csj (csj@zapo.net) wrote:

[...]

> > 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.

I used to think that way too.  But since I discovered option -i,
sed has replaced ed for most of my recursive search-and-replace
operations:

aldebaran:~> sed --help | grep -A1 in-place
  -i[suffix], --in-place[=suffix]
                 edit files in place (makes backup if extension supplied)

>    - You need to restrict the number of input files with 'xargs -n 1'

Why?  What happens?  I've never used that option myself.  Is it a
memory-allocation issue?

>    - You could run into problems with filenames containing embeded IFS
>      characters.  "-print0 / -0" are useful arguments.

Yes.

> 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

Which I used to do until I discovered option -i.



Reply to: