我正在建一个网络认证实验室。 有13个设备的一些配置,但是由于我没有完全相同的设备,我必须对配置进行一些更改。在
我试过做一个Python脚本,但它与我需要的不完全匹配。在
我有一个文件,其中包含要在表格中进行的更改:
找到这个,换成这个 现在我要更改的配置主要是在面内,所以它看起来像这样(我删除了一些配置以使其更小):
interface Serial0
description Connected to R1
frame-relay route 102 interface Serial1 201
frame-relay route 103 interface Serial2 301
frame-relay route 104 interface Serial4 401
frame-relay route 105 interface Serial5 501
frame-relay route 113 interface Serial3 311
!
interface Serial1
description Connected to R2
frame-relay route 201 interface Serial0 102
frame-relay route 203 interface Serial2 302
frame-relay route 204 interface Serial4 402
frame-relay route 205 interface Serial5 502
frame-relay route 213 interface Serial3 312
!
我想替换的地方
^{pr2}$或者像这样:
interface Serial0/0
!
interface Serial0/0.1 point-to-point
!
interface Serial0/1
!
我想替换的地方
Serial0/0,Serial0/2/0
Serial0/1,Serial0/1/0
现在我用这个方法一行一行地做:
def replace_all(text, dic):
for i, j in dic.iteritems():
text = re.sub("\\b"+i+"\\b", j, text)
我的问题是Serial0或Serial0/0在第一次匹配时被更改为Serial1/0,但是它随后被Serial1匹配,所以我得到Serial1/1/0。 我尝试过使用boundry(\b)和^和$,但似乎不起作用;还有一种情况是,Serial1可以,但Serial1/0不可以,但Serial1.200可以。在
所以它应该完全匹配我想找到的,或者我想找到的,加上一个点和一些数字,比如Serial0/1.200
有人知道怎么做,能给我指出正确的方向吗?在
一种效率低下但有效的方法可能是手动执行while循环(比如在代码中执行for循环),根据单词列表检查position变量前面的字符串,然后在命中时进行替换,并将替换单词的长度添加到position变量中。有点难看但简单有效。在
您可以逐行处理并打破循环:
编辑:如果您希望正则表达式完全匹配,则应使用split
^{pr2}$相关问题 更多 >
编程相关推荐