Tek-Tips is the largest IT community on the Internet today!

Members share and learn making Tek-Tips Forums the best source of peer-reviewed technical information on the Internet!

  • Congratulations SkipVought on being selected by the Tek-Tips community for having the most helpful posts in the forums last week. Way to Go!

conditional string substitution

Status
Not open for further replies.
Feb 5, 2012
6
0
0
NL
Hello All,

Given that I have a huge string, let's say 1000 lines,
and let's name that string like "itext".

And I am only interested in those lines in "itext" that contain the word "Description:".
And make, for example, the following substitution ONLY on the line containing the string "Description:" :
regsub -all -- {Loopback} $itext "Lo" itext ;

Is there any way to accomplish this (without going line by line, splitting and joining) ?

For example, "itext" can be something like this :
[tt]
Loopback11 is up, line protocol is up
Hardware is Loopback
Description: Loopback11-Eigrp-National
MTU 1500 bytes, BW 100000 Kbit, DLY 100 usec,
reliability 255/255, txload 1/255, rxload 1/255
Encapsulation ARPA, loopback not set
Keepalive set (10 sec)
Auto-duplex, Auto-speed
input flow-control is off, output flow-control is off
ARP type: ARPA, ARP Timeout 04:00:00
Last input never, output never, output hang never
Last clearing of "show interface" counters never
Input queue: 0/2000/20036/0 (size/max/drops/flushes); Total output drops: 242246
Queueing strategy: fifo
Output queue: 0/40 (size/max)
5 minute input rate 0 bits/sec, 0 packets/sec
5 minute output rate 0 bits/sec, 0 packets/sec
159767635870 packets input, 108501870627241 bytes, 0 no buffer
Received 9361144 broadcasts (8029769 multicasts)
0 runts, 20036 giants, 0 throttles
20036 input errors, 0 CRC, 0 frame, 0 overrun, 0 ignored
0 watchdog, 0 multicast, 0 pause input
0 input packets with dribble condition detected
200041278050 packets output, 193147599625066 bytes, 0 underruns
0 output errors, 0 collisions, 2 interface resets
0 babbles, 0 late collision, 0 deferred
0 lost carrier, 0 no carrier, 0 pause output
0 output buffer failures, 0 output buffers swapped out[/tt]

 
For multi-line mode try to use the -lineanchor switch of regsub
 
On the other hand, if the occurrence of the target text is always going to be of the form: "Description: Loopback", you could use the string map function:
Code:
set itext [string map {"Description: Loopback" "Description: Lo"} $itext]

_________________
Bob Rashkin
 
regsub -all -line -- {^(Description:.*)Loopback} $itext {\1Lo} itext

is the solution :)
 
Status
Not open for further replies.

Part and Inventory Search

Sponsor

Back
Top