-1

我正在提取接口的 IP 地址,并将该地址的第 3 个八位字节用作 BGP AS 编号的一部分。如果第 3 个八位字节 < 10,我需要在数字前插入一个 0。例如,如果第 3 个八位字节 = 8 ,则 BGP AS = 111 08

这是我当前和未完成的小程序。

event manager applet replace
event none
action 1.0 cli command "conf t"
action 1.1 cli command "do show ip int brief vlan 1"
action 1.2 regexp " [0-9.]+ " $_cli_result ip match
action 2.0 regexp {([0-9]+\.[0-9]+\.[0-9]+\.[0-9]+)} $_cli_result match ip
action 2.1 regexp {([0-9]+)\.([0-9]+)\.([0-9]+)\.([0-9]+)} $ip match first second third forth
action 2.2 set vl1 $first.$second.$third.$forth
action 2.3 cli command "router bpg 111$third"
4

1 回答 1

1

这里最简单的方法是使用format正确的格式化顺序。(如果您曾经sprintf()在 C 中使用过,您会立即理解该format命令的作用。除了 Tcl 命令在缓冲区溢出或其他类似的棘手问题方面没有任何问题。)

# Rest of your script unchanged; I'm lazy so I'll not repeat it here
set bpg [format "652%02d" $third]
action 2.3 cli command "router bpg $bpg"

这里的关键是在宽度为二 ( )的零填充 ( ) 字段中对十进制数 ( ) 进行%02d格式化 ( )。它前面有一个文字(没有那么文字)。%d02652%

如果你愿意,你可以把上面的代码合并成一行,但我认为把它写成两行会更清楚(写不清楚的代码真的没有很好的借口,因为它只会让你以后的生活更难,而且实际上并没有首先花更少的时间写清楚):

action 2.3 cli command "router bpg [format 652%02d $third]"
于 2017-07-19T08:39:53.407 回答