一.宏命令:根据子接口号自动增加一条封装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 ID到dot1Q 后面,从而实现VLAN ID的复制
" //两行的双引号,实现换行
"
EndIf
二.Jav**ript共享VLAN脚本功能:根据VLAN和port的映射关系文本和配置模板,以VLANID为文件名自动生成配置文件。
其中:VLAN和port映射关系文本格式如下:
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("请输入VLAN与Port关系表的绝对路径名",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("请输入VLAN与Port关系表的绝对路径名",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); //输入VLAN和Port映射关系文件名
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时,UE的find()貌似不能直接使用jav**ript的正则表达式,查了文档,才知道要使用//或new才能建立jav**ript的正则表达式。本想好好利用这个兴致好好学下jav**ript编程,不过,现在这3个脚本,对于以后写脚本应该基本够用了,而且今年有好多事要做,只能有空偶尔研究下吧。希望对大家有帮助^_^
注以上脚本已在UlrtaEdit 17.00.0.1028英文版和17.00.0.1030中文版测试通过,在15.0测试不生效,所以大家还是用17.0版本吧。
如果想让脚本实现其他替换功能,要修改vlanexp和portexp这两个regular expression。所以,字处理的另一难点也就是regular expression。
附件是ShareVLAN.js和IndependentVLAN.js,下载后用UE加载,方法是:
1.菜单栏--scripting----scripts---add,加载完毕后,
2.用UE新建一个空白文件
3.菜单栏--scripting----选择相应的脚本就可以执行了。
2011年5月22日星期日
UltraEdit使用技巧
订阅:
博文评论 (Atom)
没有评论:
发表评论