雏鹰部落

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 9812|回复: 21

原创:UltraEdit高级宏命令和JS脚本

    [复制链接]
发表于 2011-4-24 23:46:38 | 显示全部楼层 |阅读模式

现在工作主要做城域网,前些日子做商务楼脚本,才真实感觉受MAN的配置量好大,作为终结3层的7609的配置上万行命令,与Winford写了一整天脚本,才写好,好累,而且手工容易出错,就想到可以使用UtraEdit的脚本。但Jav**ript和宏命令很久没玩了,已忘了差不多了,调试了三天才达到预期的效果。
.宏命令:根据子接口号自动增加一条封装VLAN命令。
interface Port-channel2.2000 access
description to ShuangGeDaSha GC1830
ip address 222.68.99.1 255.255.255.240
no ip redirects
no ip unreachables
no ip proxy-arp
修改后:
interface Port-channel2.2000 access
description to ShuangGeDaSha GC1830
encapsulation dot1Q 2000
ip address 222.68.99.1 255.255.255.240
no ip redirects
no ip unreachables
no ip proxy-arp
宏命令解释版:
**Mode                  //使用**模式
ColumnModeOff              //关闭列模式
HexOff                      //关闭十六进制模式
Find RegExp "^interface Port-channel?"  //使用正则表达式查找关键字,关键字格式为:
//行首以interface Port-channel打头的,后面的?表示匹配除换行符外的任一单个//字符,因为可能是Port-channel1也可能是Port-channel2,所以用?表示
IfFound               //若找到
Key RIGHT ARROW  //光标向右移一个字符
Start**          //开始选择
Loop 4             //循环4
Key RIGHT ARROW  //也就是向右移动4个字符
EndLoop              
End**             //选择4个字符,也就是VLAN ID
Copy                 //复制VLAN ID到剪贴板
Key DOWN ARROW    //向下移动两行
Key DOWN ARROW
Key HOME            //光标移到行首
"encapsulation dot1Q " //输入"encapsulation dot1Q ",注意后有个空格
Paste          //复制剪贴板中的VLAN IDdot1Q 后面,从而实现VLAN ID的复制
"                    //两行的双引号,实现换行
"
EndIf
.Jav**ript共享VLAN脚本功能:根据VLANport的映射关系文本和配置模板,以VLANID为文件名自动生成配置文件。
其中:VLANport映射关系文本格式如下:
2000   1/0/1
2001   2/0/11
华为CX600共享VLAN配置模板:
user-group-queue GVLAN_vlan
shaping 1024 inbound
traffic behavior GVLAN_vlan-1st
user-queue cir 204 pir 1024 user-group-queue GVLAN_vlan
traffic behavior GVLAN_vlan-2nd
user-queue cir 204 pir 1024 user-group-queue GVLAN_vlan
traffic behavior GVLAN_vlan-3rd
user-queue cir 204 pir 1024 user-group-queue GVLAN_vlan
traffic behavior GVLAN_vlan-4th
user-queue cir 204 pir 1024 user-group-queue GVLAN_vlan
traffic behavior GVLAN_vlan-5th
user-queue cir 204 pir 1024 user-group-queue GVLAN_vlan
traffic policy GVLAN_vlan
share-mode
classifier 1st behavior GVLAN_vlan-1st
classifier 2nd behavior GVLAN_vlan-2nd
classifier 3rd behavior GVLAN_vlan-3rd
classifier 4th behavior GVLAN_vlan-4th
classifier 5th behavior GVLAN_vlan-5th
int g_port
port trunk allow-pass vlan _vlan
traffic-policy baseconfig inbound vlan _vlan all-layer
qos car cir 1024 cbs 51200 pbs 102400 green pass yellow pass red discard inbound vlan _vlan
interface Eth-Trunk0
traffic-policy GVLAN_vlan inbound vlan _vlan

脚本如下:
var vlanpath=UltraEdit.getString("请输入VLANPort关系表的绝对路径名",1); //必须全部是全英文目录
var modulepath=UltraEdit.getString("请输入配置模板的绝对路径名",1);
var outputpath=UltraEdit.getString("输出文件的绝对路径,最后以\\结束",1);
var vlanexp="^[0-9][0-9][0-9][0-9]";    //想实现其他功能,请修改此regular expression,比如行首三位数"^[0-9][0-9][0-9]"
var portexp="[0-9]/[0-9]/[0-9]+";        //想实现其他功能,请修改此regular expression
var vlan,port,m;
var vlandocid;
var moduledocid;
UltraEdit.columnModeOff();
UltraEdit.open(vlanpath);
vlandocid=UltraEdit.activeDocumentIdx;
UltraEdit.open(modulepath);
moduledocid=UltraEdit.activeDocumentIdx;
UltraEdit.document[vlandocid].findReplace.regExp=true;
UltraEdit.document[vlandocid].findReplace.find(vlanexp);
while(UltraEdit.document[vlandocid].isFound()){
  vlan=UltraEdit.document[vlandocid].**ion;
  UltraEdit.document[vlandocid].findReplace.find(portexp);
  if(UltraEdit.document[vlandocid].isFound()){
     port=UltraEdit.document[vlandocid].**ion;
     UltraEdit.document[moduledocid].setActive();
     UltraEdit.document[moduledocid].**All;
     m=UltraEdit.document[moduledocid].**ion;
     UltraEdit.newFile;     //不能加();
     UltraEdit.activeDocument.write(""+m);
     UltraEdit.activeDocument.top();
     UltraEdit.activeDocument.findReplace.replaceAll=true;
     UltraEdit.activeDocument.findReplace.replace("_vlan",vlan);
     UltraEdit.activeDocument.top();
     UltraEdit.activeDocument.findReplace.replace("_port",port);
     UltraEdit.saveAs(outputpath+vlan+".log");
     UltraEdit.closeFile(outputpath+vlan+".log",1);
     UltraEdit.open(modulepath);
     UltraEdit.document[vlandocid].findReplace.find(vlanexp);
  }
}
.Jav**ript独享VLAN脚本功能:基本与共享脚本一样,主要不同是所有独享VLAN的配置放在同一文件上,调试也花了一天。
var vlanpath=UltraEdit.getString("请输入VLANPort关系表的绝对路径名",1);  ////必须全部是全英文目录
var modulepath=UltraEdit.getString("请输入配置模板的绝对路径名",1);
var outputpath=UltraEdit.getString("输出文件的绝对路径名",1);
var vlanexp="^[0-9][0-9][0-9][0-9]";
var portexp="[0-9]/[0-9]/[0-9]+";
var vlan,port,m;
var vlandocid;
var moduledocid;
var outputdocid;
UltraEdit.columnModeOff();
UltraEdit.**Mode();
UltraEdit.open(outputpath);                  //输入配置模板文件名,//这个open必须放在最前面,不然会失败,很奇异
outputdocid=UltraEdit.activeDocumentIdx;
UltraEdit.open(vlanpath);
vlandocid=UltraEdit.activeDocumentIdx;
UltraEdit.open(modulepath);                 //输入VLANPort映射关系文件名
moduledocid=UltraEdit.activeDocumentIdx;
UltraEdit.document[vlandocid].findReplace.regExp=true;
UltraEdit.document[vlandocid].findReplace.find(vlanexp);
while(UltraEdit.document[vlandocid].isFound()){
  vlan=UltraEdit.document[vlandocid].**ion;
  UltraEdit.document[vlandocid].findReplace.find(portexp);
  if(UltraEdit.document[vlandocid].isFound()){
     port=UltraEdit.document[vlandocid].**ion;
     UltraEdit.document[moduledocid].findReplace.replaceAll=true;
     UltraEdit.document[moduledocid].findReplace.replace("_vlan",vlan);   //替换模板里面的关键字"_vlan"
     UltraEdit.document[moduledocid].findReplace.replaceAll=true;
     UltraEdit.document[moduledocid].findReplace.replace("_port",port);   //替换模板里面的"_Port"
     UltraEdit.document[moduledocid].**All();
     m=UltraEdit.document[moduledocid].**ion;
     UltraEdit.document[outputdocid].setActive();
     UltraEdit.document[outputdocid].bottom();
     UltraEdit.document[outputdocid].write("\r\n"+m);
     UltraEdit.closeFile(modulepath,2);
     UltraEdit.open(modulepath);
     UltraEdit.document[vlandocid].findReplace.find(vlanexp);
  }
}
UltraEdit.closeFile(outputpath,1);
后记:编程这活,也是要经常写,才能熟练,熟能生巧啊。因为不熟,这3个脚本基本花了我三天时间调试。虽然代码很简单,我没考虑ifelse等的情况,也没采用function的面向对象编程方法,结构并不优美,但关键是能用并实用,可以节省大量时间UE的正则表达式不如Unix的好,不过我在写Jav**ript时,UEfind()貌似不能直接使用jav**ript的正则表达式,查了文档,才知道要使用//new才能建立jav**ript的正则表达式。本想好好利用这个兴致好好学下jav**ript编程,不过,现在这3个脚本,对于以后写脚本应该基本够用了,而且今年有好多事要做,只能有空偶尔研究下吧。希望对大家有帮助^_^
注以上脚本已在UlrtaEdit 17.00.0.1028英文版和17.00.0.1030中文版测试通过,在15.0测试不生效,所以大家还是用17.0版本吧。
如果想让脚本实现其他替换功能,要修改vlanexpportexp这两个regular expression。所以,字处理的另一难点也就是regular expression
附件是ShareVLAN.jsIndependentVLAN.js,下载后用UE加载,方法是:
1.菜单栏--scripting----scripts---add,加载完毕后,
2.UE新建一个空白文件
3.菜单栏--scripting----选择相应的脚本就可以执行了。
游客,如果您要查看本帖隐藏内容请回复






本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
 楼主| 发表于 2011-4-24 23:47:27 | 显示全部楼层
本帖最后由 kkingkill 于 2011-4-24 23:50 编辑

这么多**,这也太多了吧
发表于 2011-4-25 00:07:26 | 显示全部楼层
我想说,你也忒强大了吧。如果你不搞思科的话,估计你是不是往程序猿方向去了。
发表于 2011-4-25 08:47:51 | 显示全部楼层
回复 2 # kkingkill 的帖子

强 顶一个~!

那个屏蔽的消息 **

其实可以在顶部用引号引起来“up date”这样 在里面插一空格 说明一下是什么~ 我以前也遇到这样的情况~

谢谢分享~!
发表于 2011-4-25 09:12:48 | 显示全部楼层
为啥都是回复可见
发表于 2011-4-25 09:32:39 | 显示全部楼层
昨天见到生哥,很意外哈哈~~~

这个看起来好复杂。。。我不懂软件的。
发表于 2011-4-25 09:38:17 | 显示全部楼层
呵呵,真是牛人!!
发表于 2011-4-25 09:38:37 | 显示全部楼层
劳动成果啊,必须要顶!
发表于 2011-4-25 09:55:54 | 显示全部楼层
生哥出现了啊 555555555555 生哥V5啊
发表于 2011-4-25 09:56:39 | 显示全部楼层
回复 4 # magic_os 的帖子

天晴你好厉害啊  
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|熊猫同学技术论坛|小黑屋| 网络工程师论坛 ( 沪ICP备09076391 )

GMT+8, 2024-11-25 23:06 , Processed in 0.131736 second(s), 19 queries , Gzip On.

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