Re: How to search and replace

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

 



On 2/2/06, Paul Howarth <paul@xxxxxxxxxxxx> wrote:
> Dan Track wrote:
> > On 2/2/06, Paul Howarth <paul@xxxxxxxxxxxx> wrote:
> >
> >>Dan Track wrote:
> >>
> >>>On 2/2/06, Paul Howarth <paul@xxxxxxxxxxxx> wrote:
> >>>
> >>>
> >>>>Dan Track wrote:
> >>>>
> >>>>
> >>>>>Hi
> >>>>>
> >>>>>I thought I'd ask this here as you guys helped me setup mrtg :)
> >>>>>
> >>>>>I've got the following pattern in a text file in linux.
> >>>>>Target[description1].1.3.4.6.5.3.:string@xxxxxxxxxx
> >>>>>Directory[description1]: server1
> >>>>>
> >>>>>Target[description2].1.3.4.6.4.9.:string@xxxxxxxxxx
> >>>>>Directory[description2]: server2
> >>>>>
> >>>>>What I would like to do is replace the ip of each with the following
> >>>>>value of "Directory". So for example I would like
> >>>>>Target[description1].1.3.4.6.5.3.:string@xxxxxxxxxx to become
> >>>>>Target[description1].1.3.4.6.5.3.:string@xxxxxxxxxxxxxxxxxxx
> >>>>>
> >>>>>How can I accomplish this using either C,perl,sed or awk
> >>>>
> >>>>sed -e '$b
> >>>>  /^Target\[[^]]*\][.0-9]*:.*@[0-9.]*$/ {
> >>>>    $!N
> >>>>    s/^\(Target\[[^]]*\][.0-9]*:.*@\)[0-9.]*\nDirectory\[[^]]*\]:
> >>>>\(.*\)$/\1\2.example.com/
> >>>>    P;D
> >>>>  }' textfile > output
> >>>>
> >>>
> >>>
> >>>Thanks for the reply. When I run it I get the following error:
> >>
> >>The long line starting with "s/" and ending with "example.com/" is a
> >>single long line; make sure your mail client didn't add a newline.
> >>
> >
> > Ok I tried that, it seem to have fixed the "s" problem. But now I get
> > the following:
> >
> > sed -e '$b /^Target\[[^]]*\][.0-9]*:.*@[0-9.]*$/ {
> > $!N
> > s/^\(Target\[[^]]*\][.0-9]*:.*@\)[0-9.]*\nDirectory\[[^]]*\]:\(.*\)$/\1\2.example.com/
> > P;D
> > }' text_files/mrtg.cfg > text_files/mrtg.cfg.changed
> > sed: can't find label for jump to `/^Target\[[^]]*\][.0-9]*:.*@[0-9.]*$/'
>
> You joined the line at the start with the "$b" to the following line.
> There should have been a newline (or a semicolon) there.
>

Excellent. Thanks very much for your help. Just two points if you don't mind.

1) I read the info page on sed, and found "b" means
"`b LABEL' Unconditionally branch to LABEL."

What does branch mean, is it merely saying jump to the first instance
of the next match?

2) The new changed config file now looks great but for this one point:
The output now looks like:
Target[description1].1.3.4.6.5.3.:string@ server1.example.com

There is a space between the "@" sign and the hostname. Any ideas on
how that got in the sed statement and how to delete it. I can re-run
the sed statement if you want.

Thanks
Dan


[Index of Archives]     [Current Fedora Users]     [Fedora Desktop]     [Fedora SELinux]     [Yosemite News]     [Yosemite Photos]     [KDE Users]     [Fedora Tools]     [Fedora Docs]

  Powered by Linux