|

楼主 |
发表于 2005-9-22 16:46:48
|
显示全部楼层
已经搞定!
http://www.tclchina.com/bbs/show ... d=595&totable=1
------------------------------------------------------------------------
flamingwave:
正则表达式只是对字符串做匹配呀.并不能给字符串里添加新的字符呀.
对你的这个要求得做一个小程序了.
看你的意思就是要把{1 2 [3-5]}用程序识别成{1 2 3 4 5}咯.
首先把foreach 后的变量搞成列表,
- set ko {1 2 [3-5]}
- regexp {\[(.?)-(.?)\]} $ko a b c
- for {set i $b} {$i <= $c} {incr i 1} {
- lappend ok $i
- }
- puts $ok
复制代码
这个OK里面就是你想要转换出来的东东了.
------------------------------------------------------------------------
利用此完成rsh到多个节点进行top命令的脚本
用法: rshtop 1 2 [4-8] [11-13] 15
等表示rsh node到1 2 4 5 6 7 8 11 12 13 15节点进行top
- # Author: HM Li <HM_Li@ustc.edu>
- # Date: 05-09-22
- #Comment: rsh node$NodeNum top
- # Usage: rshtop NodeNum1 NodeNum2 [NodeNum_1-NodeNum_2] ...
- proc top {NodeNum} {
- if {$NodeNum>0 && $NodeNum<=32} {
- set node "node$NodeNum"
- spawn rsh $node
- expect $node
- send "top\r"
- # expect "COMMAND" #如果解除这两行开头的#,
- # send "q\r" #则top后直接退出top命令
- interact {
- }
- }
- }
- foreach i $argv {
- set REG [regexp {\[(.*)-(.*)\]} $i a b c]
- if {$REG} {
- for {set j $b} {$j <= $c} {incr j 1} {
- lappend NodeList $j
- }
- foreach n $NodeList { top $n}
- set NodeList ""
- } else { top $i }
- }
复制代码 |
|