Useful Link:
=========
http://docs.activestate.com/activetcl/8.5/expect4win/regex.html
1.Swap 2 Values in Tcl using regexp:
Solution:
=========
set var "a b"
regsub {(.) (.)} $var {\2 \1} var
puts $var : b a --->>> Values Swapped
2.Write a regsub command to replace all “.” in ip address to “_”
Solution:
=======
set ip "192.168.55.55"
set b [string map {. _} $ip]
puts $b ---->>>192_168_55_55
ALITER
set ip "192.168.55.55"
regsub -all {\.} $ip {_} ip2
puts $ip2
3.Write regular expression to from the key "1G_M-C_Gig-Copper" from the below output
Port 1/1/1: Type : 1G M-C (Gig-Copper)
Solution:
=======
set out "Switch#sh media e 1/1/1
Port 1/1/1: Type : 1G M-C (Gig-Copper)
Switch#"
regexp -line {Type\s*:\s*(.*)} $out -- media
puts $media --->>> 1G M-C (Gig-Copper)
regsub -all {[\(\)]} $media "" media1
puts $$media1 --->>>1G M-C Gig-Copper
regsub -all {\s+} $media1 "_" media_key
puts $media_key --->>>1G_M-C_Gig-Copper
4.Matching any ip address
Solution:
=======
set str 192.168.32.110
regexp "(\[0-9]{1,3})\.(\[0-9]{1,3})\.(\[0-9]{1,3})\.(\[0-9]{1,3})" $str all first second third fourth
ALITER
regexp {(^[0-9]{1,3})\.([0-9]{1,3})\.([0-9]{1,3})\.([0-9]{1,3})$} $str all first second third fourth
puts "$all \n $first \n $second \n $third \n $fourth \n"
if {$first <= 255 && $second <= 255 && $third <= 255 && $fourth <= 255} {
puts "valid ip address"
} else {
puts "invlaid ip address"
}
5.To match any url:
Solution:
=======
set url https://groups.google.com
regexp -all {^[a-z]+\:\/\/[0-9.a-z_/]+} $url new
puts $new
6.To match any Email Address:
Solution:
=======
[a-zA-Z0-9_\.\+-]+@[a-zA-Z0-9-]+\.[a-zA-Z0-9-\.]+
set email "maw_raj.abcd01@gmail.com"
regexp {[a-zA-Z0-9_]+.[0-9a-zA-Z_]+@[a-z0-9A-Z_]+.[a-zA-Z_]+} $email match
puts $match
ALITER
regexp -nocase {[A-Z_]+.[A-Z0-9_]+@[A-Z]+.[A-Z]+} $email match
puts $match
7.To match date:
Solution:
========
Date – accept date input in the mm/dd/yyyy or mm-dd-yyyy formats.
((0[1-9])|(1[0-2]))[\/-]((0[1-9])|(1[0-9])|(2[0-9])|(3[0-1]))[\/-](\d{4})
set date "31/01/1000"
regexp {(0[1-9]|1[0-9]|2[0-9]|3[0-1])/(0[1-9]|1[0-2])/(\d{4})} $date match
puts $match
8.Complex Password – only accept a string that has 1 uppercase alphabet, 1 lowercase alphabet, 2 digits and 1 special character. Also the minimum allowed length is 8 characters.
Solution:
=======
(?=.*[A-Z])(?=.*[a-z])(?=.*[0-9].*[0-9])(?=.*[^a-zA-Z0-9]).{8,}
9.(hardware )?address matches either “hardware address” or “address”
Solution:
=======
set add "hardware address"
regexp -- {(hardware)?address} $add print
puts $print --->> This just print address
10.Regexp to find and print a duplicate word in a string
Solution:
=======
set line "hello sir how r u. Good to see u sir"
regexp -all {\S+} $line new
puts $new
Within the RE, \S+ means a non-empty sequence of non-whitespace characters and \s+ means a non-empty sequence of whitespace.
11. Write a TCL program to get the inet addr of eth3 interface in the following output.
Output:
======
[root@Redhat_5339 ~]# ifconfig
eth0 Link encap:Ethernet HWaddr 00:21:5E:C6:14:B8
inet addr:10.20.53.39 Bcast:10.20.63.255 Mask:255.255.240.0
inet6 addr: fe80::221:5eff:fec6:14b8/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:396614696 errors:0 dropped:221362893 overruns:0 frame:0
TX packets:128329705 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:120322245 (114.7 MiB) TX bytes:173316774 (165.2 MiB)
Interrupt:169 Memory:92000000-92012800
eth2 Link encap:Ethernet HWaddr 00:05:1E:8E:82:BB
inet addr:1.1.1.1 Bcast:1.1.1.255 Mask:255.255.255.0
inet6 addr: fe80::205:1eff:fe8e:82bb/64 Scope:Link
UP BROADCAST MULTICAST MTU:1500 Metric:1
RX packets:45 errors:0 dropped:0 overruns:69283952 frame:0
TX packets:96 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:6819 (6.6 KiB) TX bytes:20773 (20.2 KiB)
Memory:97a80000-97abffff
eth3 Link encap:Ethernet HWaddr 00:05:1E:8E:82:BC
inet addr:3.3.3.1 Bcast:3.3.3.255 Mask:255.255.255.0
inet6 addr: fe80::205:1eff:fe8e:82bc/64 Scope:Link
UP BROADCAST MULTICAST MTU:1500 Metric:1
RX packets:988372099 errors:0 dropped:0 overruns:926779818 frame:0
TX packets:17 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:2640535661 (2.4 GiB) TX bytes:4431 (4.3 KiB)
Memory:97ac0000-97afffff
Solution:
=========
#! /usr/bin/tclsh
set str "eth0 Link encap:Ethernet HWaddr 00:21:5E:C6:14:B8
inet addr:10.20.53.39 Bcast:10.20.63.255 Mask:255.255.240.0
inet6 addr: fe80::221:5eff:fec6:14b8/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:396614696 errors:0 dropped:221362893 overruns:0 frame:0
TX packets:128329705 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:120322245 (114.7 MiB) TX bytes:173316774 (165.2 MiB)
Interrupt:169 Memory:92000000-92012800
eth2 Link encap:Ethernet HWaddr 00:05:1E:8E:82:BB
inet addr:1.1.1.1 Bcast:1.1.1.255 Mask:255.255.255.0
inet6 addr: fe80::205:1eff:fe8e:82bb/64 Scope:Link
UP BROADCAST MULTICAST MTU:1500 Metric:1
RX packets:45 errors:0 dropped:0 overruns:69283952 frame:0
TX packets:96 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:6819 (6.6 KiB) TX bytes:20773 (20.2 KiB)
Memory:97a80000-97abffff
eth3 Link encap:Ethernet HWaddr 00:05:1E:8E:82:BC
inet addr:3.3.3.1 Bcast:3.3.3.255 Mask:255.255.255.0
inet6 addr: fe80::205:1eff:fe8e:82bc/64 Scope:Link
UP BROADCAST MULTICAST MTU:1500 Metric:1
RX packets:988372099 errors:0 dropped:0 overruns:926779818 frame:0
TX packets:17 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:2640535661 (2.4 GiB) TX bytes:4431 (4.3 KiB)
Memory:97ac0000-97afffff"
regexp {eth3 [a-z A-Z].+} $str match1
regexp {inet addr:[.0-9]+} $match1 match2
puts $match2 ------->>inet addr:3.3.3.1
12. Write a TCL program to check the given ip address falls in which class (A, B…) assuming the default subnet mask.
Solution:
======
#! /usr/bin/tclsh
puts "enter ipv4 address in w.x.y.z format"
gets stdin ip
set result [regexp {[0-9]+.[0-9]+.[0-9]+.[0-9]+} $ip str]
if {$result == 0} {
puts "IP address is invalid... not in correct format"
exit
}
set result [regexp {([0-9]+).([0-9]+).([0-9]+).([0-9]+)} $ip match part1 part2 part3 part4]
if {$part1 > 0 && $part1 < 256 && $part2 > 0 && $part2 < 256 && $part3 > 0 && $part3 < 256 && $part4 > 0 && $part4 < 256} {
} else { puts "invalid ip... range should be 0-255"
exit
}
set n $part1
if {$n > 0 && $n < 128} {
puts "class A"
} elseif {$n > 127 && $n < 192} {
puts "class B"
} elseif {$n > 191 && $n < 224} {
puts "class C"
} elseif {$n > 223 && $n < 240} {
puts "class D"
} elseif {$n >239 && $n <256} {
puts "class E"
} else {
puts "not a valid ip address"
}
13.Use of eval:
Solution:
=======
set a 10
set b a
eval puts $$b --->>10
14.To Extract "Hardware is ","Configured speed","input errors" "CRC" from the below output.
set out "Switch#ICX7150-C12 Switch#sh int ethe 1/1/2
GigabitEthernet1/1/2 is disabled, line protocol is down
Port down for 2 day(s) 22 hour(s) 41 minute(s) 38 second(s)
Hardware is GigabitEthernet, address is 00e0.5200.0101 (bia 00e0.5200.0101)
Configured speed auto, actual unknown, configured duplex fdx, actual unknown
Configured mdi mode AUTO, actual unknown
Member of L2 VLAN ID 1, port is untagged, port state is DISABLED
BPDU guard is Disabled, ROOT protect is Disabled, Designated protect is Disabled
Link Error Dampening is Disabled
STP configured to ON, priority is level0, mac-learning is enabled
Flow Control is config enabled, oper enabled, negotiation disabled
Mirror disabled, Monitor disabled
Mac-notification is disabled
Not member of any active trunks
Not member of any configured trunks
No port name
IPG MII 0 bits-time, IPG GMII 0 bits-time
MTU 1500 bytes
300 second input rate: 0 bits/sec, 0 packets/sec, 0.00% utilization
300 second output rate: 0 bits/sec, 0 packets/sec, 0.00% utilization
0 packets input, 0 bytes, 0 no buffer
Received 0 broadcasts, 0 multicasts, 0 unicasts
0 input errors, 0 CRC, 0 frame, 0 ignored
0 runts, 0 giants
0 packets output, 0 bytes, 0 underruns
Transmitted 0 broadcasts, 0 multicasts, 0 unicasts
0 output errors, 0 collisions
Relay Agent Information option: Disabled
Egress queues:
Queue counters Queued packets Dropped Packets
0 0 0
1 0 0
2 0 0
3 0 0
4 0 0
5 0 0
6 0 0
7 0 0
ICX7150-C12 Switch#"
Solution:
=======
regexp " Hardware is +(\[0-9A-Za-z\.\]+)," $out str hw_type
puts $hw_type
regexp "Configured speed +(\[0-9A-Za-z\.\]+)," $out str config_speed
puts $config_speed
regexp " (\[0-9/]+) input errors," $out str in_error
puts $in_error
regexp " (\[0-9/]+) CRC," $out str crc
puts $crc
15.To Get the Speed Output from the below output "None" in the below case.
Solution:
======
set out "Switch#show inte bri ethe 1/1/2
Port Link State Dupl Speed Trunk Tag Pvid Pri MAC Name
1/1/2 Disable None None None None No 1 0 00e0.5200.0101
Switch#"
set speed ""
set line_out [split $out '\n']
foreach out1 $line_out {
if {$out1 != ""} {
set str ""
if { [ regexp "(\[0-9/]+)+/+(\[0-9/]+)+/+(\[0-9/])+\s*" $out1 str ] } {
set sp [split $out1 "t+" ]
regexp {[^ ]+\s+[^ ]+\s+[^ ]+\s+[^ ]+\s+([^ ]+)\s+} $sp -- speed
}
}
}
puts $speed
=========
http://docs.activestate.com/activetcl/8.5/expect4win/regex.html
1.Swap 2 Values in Tcl using regexp:
Solution:
=========
set var "a b"
regsub {(.) (.)} $var {\2 \1} var
puts $var : b a --->>> Values Swapped
2.Write a regsub command to replace all “.” in ip address to “_”
Solution:
=======
set ip "192.168.55.55"
set b [string map {. _} $ip]
puts $b ---->>>192_168_55_55
ALITER
set ip "192.168.55.55"
regsub -all {\.} $ip {_} ip2
puts $ip2
3.Write regular expression to from the key "1G_M-C_Gig-Copper" from the below output
Port 1/1/1: Type : 1G M-C (Gig-Copper)
Solution:
=======
set out "Switch#sh media e 1/1/1
Port 1/1/1: Type : 1G M-C (Gig-Copper)
Switch#"
regexp -line {Type\s*:\s*(.*)} $out -- media
puts $media --->>> 1G M-C (Gig-Copper)
regsub -all {[\(\)]} $media "" media1
puts $$media1 --->>>1G M-C Gig-Copper
regsub -all {\s+} $media1 "_" media_key
puts $media_key --->>>1G_M-C_Gig-Copper
4.Matching any ip address
Solution:
=======
set str 192.168.32.110
regexp "(\[0-9]{1,3})\.(\[0-9]{1,3})\.(\[0-9]{1,3})\.(\[0-9]{1,3})" $str all first second third fourth
ALITER
regexp {(^[0-9]{1,3})\.([0-9]{1,3})\.([0-9]{1,3})\.([0-9]{1,3})$} $str all first second third fourth
puts "$all \n $first \n $second \n $third \n $fourth \n"
if {$first <= 255 && $second <= 255 && $third <= 255 && $fourth <= 255} {
puts "valid ip address"
} else {
puts "invlaid ip address"
}
5.To match any url:
Solution:
=======
set url https://groups.google.com
regexp -all {^[a-z]+\:\/\/[0-9.a-z_/]+} $url new
puts $new
6.To match any Email Address:
Solution:
=======
[a-zA-Z0-9_\.\+-]+@[a-zA-Z0-9-]+\.[a-zA-Z0-9-\.]+
set email "maw_raj.abcd01@gmail.com"
regexp {[a-zA-Z0-9_]+.[0-9a-zA-Z_]+@[a-z0-9A-Z_]+.[a-zA-Z_]+} $email match
puts $match
ALITER
regexp -nocase {[A-Z_]+.[A-Z0-9_]+@[A-Z]+.[A-Z]+} $email match
puts $match
7.To match date:
Solution:
========
Date – accept date input in the mm/dd/yyyy or mm-dd-yyyy formats.
((0[1-9])|(1[0-2]))[\/-]((0[1-9])|(1[0-9])|(2[0-9])|(3[0-1]))[\/-](\d{4})
set date "31/01/1000"
regexp {(0[1-9]|1[0-9]|2[0-9]|3[0-1])/(0[1-9]|1[0-2])/(\d{4})} $date match
puts $match
8.Complex Password – only accept a string that has 1 uppercase alphabet, 1 lowercase alphabet, 2 digits and 1 special character. Also the minimum allowed length is 8 characters.
Solution:
=======
(?=.*[A-Z])(?=.*[a-z])(?=.*[0-9].*[0-9])(?=.*[^a-zA-Z0-9]).{8,}
9.(hardware )?address matches either “hardware address” or “address”
Solution:
=======
set add "hardware address"
regexp -- {(hardware)?address} $add print
puts $print --->> This just print address
10.Regexp to find and print a duplicate word in a string
Solution:
=======
set line "hello sir how r u. Good to see u sir"
regexp -all {\S+} $line new
puts $new
Within the RE, \S+ means a non-empty sequence of non-whitespace characters and \s+ means a non-empty sequence of whitespace.
11. Write a TCL program to get the inet addr of eth3 interface in the following output.
Output:
======
[root@Redhat_5339 ~]# ifconfig
eth0 Link encap:Ethernet HWaddr 00:21:5E:C6:14:B8
inet addr:10.20.53.39 Bcast:10.20.63.255 Mask:255.255.240.0
inet6 addr: fe80::221:5eff:fec6:14b8/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:396614696 errors:0 dropped:221362893 overruns:0 frame:0
TX packets:128329705 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:120322245 (114.7 MiB) TX bytes:173316774 (165.2 MiB)
Interrupt:169 Memory:92000000-92012800
eth2 Link encap:Ethernet HWaddr 00:05:1E:8E:82:BB
inet addr:1.1.1.1 Bcast:1.1.1.255 Mask:255.255.255.0
inet6 addr: fe80::205:1eff:fe8e:82bb/64 Scope:Link
UP BROADCAST MULTICAST MTU:1500 Metric:1
RX packets:45 errors:0 dropped:0 overruns:69283952 frame:0
TX packets:96 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:6819 (6.6 KiB) TX bytes:20773 (20.2 KiB)
Memory:97a80000-97abffff
eth3 Link encap:Ethernet HWaddr 00:05:1E:8E:82:BC
inet addr:3.3.3.1 Bcast:3.3.3.255 Mask:255.255.255.0
inet6 addr: fe80::205:1eff:fe8e:82bc/64 Scope:Link
UP BROADCAST MULTICAST MTU:1500 Metric:1
RX packets:988372099 errors:0 dropped:0 overruns:926779818 frame:0
TX packets:17 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:2640535661 (2.4 GiB) TX bytes:4431 (4.3 KiB)
Memory:97ac0000-97afffff
Solution:
=========
#! /usr/bin/tclsh
set str "eth0 Link encap:Ethernet HWaddr 00:21:5E:C6:14:B8
inet addr:10.20.53.39 Bcast:10.20.63.255 Mask:255.255.240.0
inet6 addr: fe80::221:5eff:fec6:14b8/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:396614696 errors:0 dropped:221362893 overruns:0 frame:0
TX packets:128329705 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:120322245 (114.7 MiB) TX bytes:173316774 (165.2 MiB)
Interrupt:169 Memory:92000000-92012800
eth2 Link encap:Ethernet HWaddr 00:05:1E:8E:82:BB
inet addr:1.1.1.1 Bcast:1.1.1.255 Mask:255.255.255.0
inet6 addr: fe80::205:1eff:fe8e:82bb/64 Scope:Link
UP BROADCAST MULTICAST MTU:1500 Metric:1
RX packets:45 errors:0 dropped:0 overruns:69283952 frame:0
TX packets:96 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:6819 (6.6 KiB) TX bytes:20773 (20.2 KiB)
Memory:97a80000-97abffff
eth3 Link encap:Ethernet HWaddr 00:05:1E:8E:82:BC
inet addr:3.3.3.1 Bcast:3.3.3.255 Mask:255.255.255.0
inet6 addr: fe80::205:1eff:fe8e:82bc/64 Scope:Link
UP BROADCAST MULTICAST MTU:1500 Metric:1
RX packets:988372099 errors:0 dropped:0 overruns:926779818 frame:0
TX packets:17 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:2640535661 (2.4 GiB) TX bytes:4431 (4.3 KiB)
Memory:97ac0000-97afffff"
regexp {eth3 [a-z A-Z].+} $str match1
regexp {inet addr:[.0-9]+} $match1 match2
puts $match2 ------->>inet addr:3.3.3.1
12. Write a TCL program to check the given ip address falls in which class (A, B…) assuming the default subnet mask.
Solution:
======
#! /usr/bin/tclsh
puts "enter ipv4 address in w.x.y.z format"
gets stdin ip
set result [regexp {[0-9]+.[0-9]+.[0-9]+.[0-9]+} $ip str]
if {$result == 0} {
puts "IP address is invalid... not in correct format"
exit
}
set result [regexp {([0-9]+).([0-9]+).([0-9]+).([0-9]+)} $ip match part1 part2 part3 part4]
if {$part1 > 0 && $part1 < 256 && $part2 > 0 && $part2 < 256 && $part3 > 0 && $part3 < 256 && $part4 > 0 && $part4 < 256} {
} else { puts "invalid ip... range should be 0-255"
exit
}
set n $part1
if {$n > 0 && $n < 128} {
puts "class A"
} elseif {$n > 127 && $n < 192} {
puts "class B"
} elseif {$n > 191 && $n < 224} {
puts "class C"
} elseif {$n > 223 && $n < 240} {
puts "class D"
} elseif {$n >239 && $n <256} {
puts "class E"
} else {
puts "not a valid ip address"
}
13.Use of eval:
Solution:
=======
set a 10
set b a
eval puts $$b --->>10
14.To Extract "Hardware is ","Configured speed","input errors" "CRC" from the below output.
set out "Switch#ICX7150-C12 Switch#sh int ethe 1/1/2
GigabitEthernet1/1/2 is disabled, line protocol is down
Port down for 2 day(s) 22 hour(s) 41 minute(s) 38 second(s)
Hardware is GigabitEthernet, address is 00e0.5200.0101 (bia 00e0.5200.0101)
Configured speed auto, actual unknown, configured duplex fdx, actual unknown
Configured mdi mode AUTO, actual unknown
Member of L2 VLAN ID 1, port is untagged, port state is DISABLED
BPDU guard is Disabled, ROOT protect is Disabled, Designated protect is Disabled
Link Error Dampening is Disabled
STP configured to ON, priority is level0, mac-learning is enabled
Flow Control is config enabled, oper enabled, negotiation disabled
Mirror disabled, Monitor disabled
Mac-notification is disabled
Not member of any active trunks
Not member of any configured trunks
No port name
IPG MII 0 bits-time, IPG GMII 0 bits-time
MTU 1500 bytes
300 second input rate: 0 bits/sec, 0 packets/sec, 0.00% utilization
300 second output rate: 0 bits/sec, 0 packets/sec, 0.00% utilization
0 packets input, 0 bytes, 0 no buffer
Received 0 broadcasts, 0 multicasts, 0 unicasts
0 input errors, 0 CRC, 0 frame, 0 ignored
0 runts, 0 giants
0 packets output, 0 bytes, 0 underruns
Transmitted 0 broadcasts, 0 multicasts, 0 unicasts
0 output errors, 0 collisions
Relay Agent Information option: Disabled
Egress queues:
Queue counters Queued packets Dropped Packets
0 0 0
1 0 0
2 0 0
3 0 0
4 0 0
5 0 0
6 0 0
7 0 0
ICX7150-C12 Switch#"
Solution:
=======
regexp " Hardware is +(\[0-9A-Za-z\.\]+)," $out str hw_type
puts $hw_type
regexp "Configured speed +(\[0-9A-Za-z\.\]+)," $out str config_speed
puts $config_speed
regexp " (\[0-9/]+) input errors," $out str in_error
puts $in_error
regexp " (\[0-9/]+) CRC," $out str crc
puts $crc
15.To Get the Speed Output from the below output "None" in the below case.
Solution:
======
set out "Switch#show inte bri ethe 1/1/2
Port Link State Dupl Speed Trunk Tag Pvid Pri MAC Name
1/1/2 Disable None None None None No 1 0 00e0.5200.0101
Switch#"
set speed ""
set line_out [split $out '\n']
foreach out1 $line_out {
if {$out1 != ""} {
set str ""
if { [ regexp "(\[0-9/]+)+/+(\[0-9/]+)+/+(\[0-9/])+\s*" $out1 str ] } {
set sp [split $out1 "t+" ]
regexp {[^ ]+\s+[^ ]+\s+[^ ]+\s+[^ ]+\s+([^ ]+)\s+} $sp -- speed
}
}
}
puts $speed
Thanks admin for sharing this information.
ReplyDeleteTCL Price in Pakistan