[BL] USING SED TO SUBSTITUTE: was Re: bash help; changing case of file names, hyperlinks
Lee Forrest
lforrestster at gmail.com
Sun Feb 25 08:03:26 EST 2007
On Sun, Feb 25, 2007 at 05:23:54AM +0000, sindi keesan wrote:
> > I made a testfile containing hello.
> >
> >
> >
> > cat testfile | sed -e "/hello/bye/" > testfile2
> > I get the same file copied, with hello not bye.
> >
> > I tried with and without -e and " "
> >
> >
> > cat testfile | sed /hello/goodbye/ > testfile3
> > sed: Unsupported command o
> > I get an empty file.
> >
> > cat testfile | sed /hello/gbye > testfile4
> > sed: Can't find label for jump to `ye'
> >
> >
> > Where did I go wrong?
> >
> >
> > Sindi
> >
>
> man sed
>
> Searched on substitute and found
>
> [addr2]s/re/replacement/flags
>
> and made a lucky guess at the meaning of it.
>
> cat testfile | sed "s/hello/goodbye/" > testfile2 worked as expected.
>
> You cannot add or subtract slashes but " " is optional here
I'd use either single or double quotes. That's standard. Single quotes
will prevent any variables from being interpreted.
You can use different seperators:
s:/usr:/usr/foo: # :
s|/usr|/usr/foo| # |
Notice that they allow you to use forward slashes without escaping them.
Can be very handy.
> s is for substitute, and without it the g and b in previous tests are
> misinterpreted?
Yes. And no substitutions are done without the s.
/foo/s/aaa/bbb/
That would limit the substitutions to the first instance of aaa only on
lines with foo in them.
/foo/d
would delete any lines with foo in them
sed -n '/foo/p'
would print any line line with foo in it.
(the -n prevents the printing of the unwanted lines - otherwise you'd
get the whole file with the selected lines duplicated)
Sed was derived from ed, and this would be the equivalent
command using that editor:
g/foo/p
or
g/RE/p
with RE meaning 'regular expression'.
And there you have the origin of the grep utility.
Lee
--
BasicLinux: Small is Beautiful
http://www.basiclinux.com.ru
More information about the BasLinux
mailing list