我有这个形状“001122334455”的mac地址,我想变成“00 11 22 33 44 55”。我想有一种方法可以在一行中做到这一点,但我发现的唯一方法是以下可笑的可怕过程。有人能告诉我如何正确地做到这一点吗?
proc addSpaces { mac } {
set mac [split $mac {}]
set i 0
while { $i < 12 } {
if { [expr $i % 2] == 0 } {
append macAddr " "
append macAddr [lindex $mac $i]
append macAddr [lindex $mac [expr $i + 1]]
}
incr i
}
return $macAddr
}
答案 0 :(得分:3)
您可以使用tcl极其灵活的foreach
:
foreach {a b} [split $mac {}] {
append macAddr " $a$b"
}
或者,如果您想摆脱前导空格,请构造一个列表而不是字符串:
foreach {a b} [split $mac {}] {
lappend macAddr "$a$b"
}
join $macAddr " "
或者,您可以在返回
之前string trim
使用您的字符串
答案 1 :(得分:3)
regsub也有效
set s 001122334455
set t [string trimright [regsub -all {..} $s {& }]]
puts ">$t<"
>00 11 22 33 44 55<
@Donal的建议很棒:
set t [join [regexp -all -inline .. $s]] ;# "00 11 22 33 44 55"