This is part of The Pile, a partial archive of some open source mailing lists and newsgroups.
Subject: Re: [sf-perl] inplace editing in 5.6
From: Garth Webb <garth@redhat.com>
Date: Wed, 28 Jun 2000 12:46:48 -0700
"Matthew D. P. K. Strelchun-Lanier" wrote:
>
> hey-
>
> i want to verify that i'm not on crack, and that this should work...
>
> perl -p -i.bak -e "s/reqfields/reqinsertfields/g;" `find . -name "*.pm" |
> xargs grep -n reqfields`
>
> i get the following response:
> 'Missing }.'
>
> i've verified that all the files are ok. what am i missing?
I'm confused about what you're trying to do. Do you just want to
repalce all instances of 'reqfields' with 'reqinsertfields'? I think
whats throwing me (and maybe perl) is the '-n' flag on grep. You are
passing file names to perl whos contents include 'reqfields', but the
'-n' is appending a line number to it which I think ruins the file name
for Perl when it tried to open it. Try:
find . -name "*.pm" | xargs perl -pi.bak -e "s/reqfields/reqinsertfields/g;"
and don't worry about the grep; perl won't do anything if 'reqfields'
isn't in the file.
===
Subject: Re: [sf-perl] inplace editing in 5.6
From: Spencer Thiel <spen@dnai.com>
Date: Wed, 28 Jun 2000 18:50:40 -0700
Try switching the order of commands that you are trying to execute:
find . -name '*.pm' -exec perl -pi.bak -e 's/reqfields/reqinsertfields/g' {} \;
perl does the grep for you through the // (i think)
===
Subject: Re: [sf-perl] inplace editing in 5.6
From: Ian Kallen <spidaman@salon.com>
Date: Wed, 28 Jun 2000 23:40:48 -0700 (PDT)
Today, Spencer Thiel <spen@dnai.com> frothed and gesticulated about Re:...:
> Try switching the order of commands that you are trying to execute:
>
> find . -name '*.pm' -exec perl -pi.bak -e 's/reqfields/reqinsertfields/g' {} \;
>
> perl does the grep for you through the // (i think)
No, the reply that just had the file names piping into xargs and perl is
better: it builds an @ARGV for perl and and kicks it off once. Your
proposal will startup a perl interpretter for every file returned by find!
For command line stuff, xargs is your pal :)
===