Re: How to search and replace

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

 



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.

Paul.


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

  Powered by Linux