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.