LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 1486|回复: 3

tcl中如何对正则表达式展开,比如将参数[1-3]展开为 1 2 3

[复制链接]
发表于 2005-9-22 10:43:03 | 显示全部楼层 |阅读模式
想实现如下功能:
foreach i 正则表达式 {

}

比如foreach i {1 2 [3-5]}希望等于foreach i 1 2 3 4 5

多谢
发表于 2005-9-22 14:42:15 | 显示全部楼层

  1. for i in 1 2 $(seq 3 5);do
  2. ....
  3. done
复制代码

hou~~hou`~~
回复 支持 反对

使用道具 举报

 楼主| 发表于 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 后的变量搞成列表,

  1. set ko {1 2 [3-5]}
  2. regexp {\[(.?)-(.?)\]}  $ko a b c
  3. for {set i $b} {$i <= $c} {incr i 1} {
  4.    lappend ok $i  
  5. }

  6. 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

  1. # Author: HM Li <HM_Li@ustc.edu>
  2. #   Date: 05-09-22
  3. #Comment: rsh node$NodeNum top
  4. #  Usage: rshtop NodeNum1 NodeNum2 [NodeNum_1-NodeNum_2] ...

  5. proc top {NodeNum} {
  6.         if {$NodeNum>0 && $NodeNum<=32} {
  7.                 set node "node$NodeNum"
  8.                 spawn rsh $node
  9.                 expect $node
  10.                 send "top\r"
  11. #               expect "COMMAND" #如果解除这两行开头的#,
  12. #               send "q\r"       #则top后直接退出top命令
  13.                 interact {
  14.                 }
  15.         }
  16. }

  17. foreach i $argv {
  18.         set REG [regexp {\[(.*)-(.*)\]}  $i a b c]
  19.         if {$REG} {
  20.                 for {set j $b} {$j <= $c} {incr j 1} {
  21.                    lappend NodeList $j
  22.                 }
  23.                 foreach n $NodeList { top $n}
  24.                 set NodeList ""
  25.         } else { top $i }

  26. }
复制代码
回复 支持 反对

使用道具 举报

发表于 2005-9-23 12:16:52 | 显示全部楼层
弓虽!
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表