[TAG] Talkback:133/cherian.html
Ben Okopnik
ben at linuxgazette.net
Sat Jun 6 09:52:59 MSD 2009
[Gerry, please remember to include the list in the CC.]
On Fri, Jun 05, 2009 at 11:03:44PM -0500, Papciak, Gerard (Gerry) wrote:
> OK...you indicated sed -i 's/\<whs\>/&2/g' *
>
> 1st source of confusion: \<whs\ ....I understand the backslashes can
> act as 'delimiters', but why the '<'-sign?
They're not delimiters; that would be the forward slashes. '\<word\>' is
a construct used to define a stand-alone word rather than a string:
``
echo 'foobar'|sed 's/\<foo\>/xyz/' # Still 'foobar'
echo 'foo bar'|sed 's/\<foo\>/xyz/' # Now, it's 'xyz bar'
''
> SIMPLER CASE to HELP ME GET THIS...
>
> fisw1pd2 /export/home/c3782/TEST> sed -i 's/rr/zz/g' *
> sed: illegal option -- i
Whoops - you've got an older version of 'sed'.
``
ben at Jotunheim:~$ sed --version
GNU sed version 4.1.5
''
That's why I sent along the two different examples.
> I have 5 files in a directory: a.dat, b.dat, c.dat, d.dat, e.dat.
>
> Each contains: larry, gerry, diane, marianne, john, wally in separate
> lines.
>
> I want to make each file look like this: lazzy, gezzy, diane, marianne,
> john, wally.
I'll quote myself from my previous email:
> for file in *
> do
> /usr/bin/sed 's/\<whs\>/&2/g' $file > $file.NEW
> /bin/mv $file.NEW $file
> done
It would work the same way for the above case:
```
for file in *
do
/usr/bin/sed 's/rr/zz/g' $file > $file.NEW
/bin/mv $file.NEW $file
done
'''
Or, as Faber mentioned, you could use Perl. It's had that '-i' option
for a long time now.
```
perl -i~ -wpe 's/rr/zz/g' *
'''
This will make your desired changes in all the files, saving the
originals with a '~' extension. If you don't want the backups, then just
leave off the '~'.
--
* Ben Okopnik * Editor-in-Chief, Linux Gazette * http://LinuxGazette.NET *
More information about the TAG
mailing list