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:
> >>>>
> >>>>
> >>>>>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?
>
> Yes, branch means jump. If LABEL is omitted, the branch is to the end of
> the script.
>
> > 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.
>
> You dropped a space from the script:
>
> I had:    Directory\[[^]]*\]: \(.*\)$
> You have: Directory\[[^]]*\]:\(.*\)$
>
> I guess your mail client changed the space to a newline.
>
Great, Excellent.

Thanks for all your help.

Dan


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

  Powered by Linux