使用TCL格式化Mac地址

时间:2012-11-07 11:42:12

标签: string macros tcl mac-address

您好我正在尝试在名为Shorthand的程序中使用TCL,这是一个文本宏程序。 无论如何,我试图用它来规定和重新格式化Mac地址。我无法弄清楚在指定的索引整数处拆分字符串的功能。这是我到目前为止所拥有的。

set DirtyMac [sh_set clipboard]
set HalfMac [string map { .  "" } $DirtyMac ]
set FullMac [string map { : "" } $HalfMac]
set ParsedMac [string map { " " "" } $FullMac]
if {[string length $ParsedMac] < 12 } {
return "Mac too short";
} elseif {[string length $ParsedMac] > 12 } {
return "Mac too long";
} else {
return [string map { " " "" } $ParsedMac]
}

那就是清除Mac中所有不需要的字符 我一直在尝试

set Mac1 [linsert $ParsedMac 4 .]
return $Mac1;

set Mac1 [split [string is index $ParsedMac 4 ] "."]
return $Mac1;

什么都没有用......任何人都可以做的事情都很棒!

好的,我要做的是拿一个Mac地址,如11:22:33:44:55:66或1122.3344.5566或112233445566,输出为3种格式之一。我将最终编写3个不同的脚本,这些脚本将根据输出的需要进行调用。

所以举个例子  我有mac 1122.3344.5566我想把它变成11:22:33:44:55:66

set DirtyMac "1122.3344.5566"
set ParsedMac [string map {. "" : "" " " ""} $DirtyMac]
scan $ParsedMac "%2s%2s%2s%2s%2s%2s" a b c d e f
set FullMac [join $a $b $c $d $e $f  ":"]
return $FullMac;

OR

我有mac 112233445566我想把它变成1122.3344.5566

set DirtyMac "112233445566"
set ParsedMac [string map {. "" : "" " " ""} $DirtyMac]
scan $ParsedMac "%2s%2s%2s%2s%2s%2s" a b c d e f
set FullMac [join $a $b $c $d $e $f  ":"]
return $FullMac;

最后

我有mac 1122.3344.5566 || 11:22:33:44:55:66我想把它变成112233445566

set DirtyMac | Mac Address Input|
set ParsedMac [string map {. "" : "" " " ""} $DirtyMac] 
return $ParsedMac;

1 个答案:

答案 0 :(得分:3)

首先,您只需一步即可完成清洁工作:

set ParsedMac [string map {. "" : "" " " ""} $DirtyMac]

请注意,我实际上很想使用不同的清洁方法:删除所有非十字符:

set ParsedMac [regsub -all {[^0-9a-fA-F]} $DirtyMac ""]

其次,将该字符串拆分为4个字符的部分(请注意,我假设您先将长度检查放在第一位)实际上最好用scan完成:

scan $ParsedMac "%4x%4x%4x" a b c

这将提取四个四位十六进制数字并将其转换为数字。或者,您可以将它们扫描为普通字符串:

scan $ParsedMac "%4s%4s%4s" a b c

然后你需要做任何你想做的事情,把这些碎片重新组合在一起。