I need to parse lines which looks like:
1.3.6.1.4.1.2076.50.3.1.3.2 2
1.3.6.1.4.1.2076.50.3.1.4.1 64 127.0.0.101
I use the below code to parse it:
while {[gets $in line] != -1} {
regexp {(.*\.)\d } $line -> line
puts "$line \n" }
in this case i get
1.3.6.1.4.1.2076.50.3.1.3. ---> I don't want to hold the "." at the end
1.3.6.1.4.1.2076.50.3.1.4.1 64 127.0.0. -----> it holds also the whole string with values and remove only the last dgits after the last dot.
how can modify the regexp so as to take the below reults:
1.3.6.1.4.1.2076.50.3.1.3
1.3.6.1.4.1.2076.50.3.1.4
CodePudding user response:
You can use
regexp {^(\S )\.\d } $line -> line
See the Tcl demo online.
The regex matches
^
- start of string(\S )
- Group 1 (its contents are assigned toline
): one or more non-whitespace chars\.
- a literal dot\d
- one or more digits.
See the regex demo.
CodePudding user response:
A non-regexp version for comparison:
while {[gets $in line] >= 0} {
set word [lindex [split $line] 0]
puts [string range $word 0 [string last . $word]-1]
}