0

我正在尝试搜索并匹配保存在 .txt 文件中的 cisco 路由器配置上的特定字符串。这是部分 .txt 文件的示例:

ip sla 101
udp-jitter 10.0.0.1 48092
request-data-size 64
tos 100
tag hostname
frequency 300
ip sla schedule 101 life forever start-time now
ip sla 102
udp-jitter 10.0.26.36 48092
request-data-size 64
tos 100
owner owner
tag hostname
frequency 300
ip sla schedule 102 life forever start-time now
ip sla 103
udp-jitter 10.0.114.1 48092
tos 100
vrf mskjhhj
owner owner2
tag hostname
ip sla schedule 103 life forever start-time now

因此,想象一下 500 个 .txt 文件,并且在配置上都有不同的变化,但都必须具有“IP SLA 101、102、103 等......”

我要抓取和保存的部分是每个“IP SLA”下的配置。例如,第一行是“ip sla 101”,整个配置如下:

ip sla 101
udp-jitter 10.0.0.1 48092
request-data-size 64
tos 100
tag xb02wepr01-004108
frequency 300
ip sla schedule 101 life forever start-time now

我希望能够搜索整个文件并获取每个“ip sla”的信息请记住,某些文件具有不同的配置,唯一相同的是当其中一个 ip sla 是完成它之后是另一个 ip sla,直到没有更多。我不知道我是否解释自己,因为它是思科配置。

这是我的代码:

f =open('config.txt')
f =f.readlines()
f_out =open('save_result.txt', 'wb')
for i in f:
    if 'ip sla <any number>:
        ipsla<number>=[]
        ipsla<number>.append(i)
        ipslacurrent = i
    elif i != <any number>:
        ipsla<number>.append(i)
    f_out.write(ipsla<anynumber>)
f_out.close()

我希望这一切都有意义,如果不是我道歉。如果有任何其他方式可以实现这一点,我将不胜感激。可能使用正则表达式,但我没有使用 rgex 的经验。谢谢

更新:

我基本上想要的是多变量。在脚本结束时,我希望脚本收集如下示例:

例子:

ip_sla_101 =['udp-jitter 10.0.0.1 48092', 'request-data-size 64','tos 100','tag hostname','frequency 300','ip sla schedule 101 life forever start-time now']

ip_sla_102 =['udp-jitter 10.0.26.36 48092', 'request-data-size 64','tos 100','owner owner', 'tag hostname','frequency 300','ip sla schedule 102 life forever start-time now']

ip_sla_103 =['udp-jitter 10.0.114.1 48092','tos 100','owner owner2', 'tag hostname', 'ip sla schedule 103 life forever start-time now']
4

2 回答 2

0

我不太确定你想要什么,但我认为你想抓住整条线,在这种情况下你可以这样做:

with open('outfile.txt','w') as out_file:
    with open('infile.txt','r') as in_file:
        for line in in_file:
            if 'ip sla' in line:
                out_file.write(line)
于 2013-03-11T23:52:26.263 回答
0

我们将只使用一个简单的正则表达式来识别“ip sla”后跟数字,而不是字母:

import re
matcher = re.compile( "ip sla [0-9]+" )

这意味着:文字字符串“ip sla”,后跟一组 0-9 中的一个或多个字符(十进制数字)。

现在,您只需要知道 matcher.match(s) 会告诉您字符串 s 是否与模式匹配。

你不需要为其余的做任何花哨的事情。这样的事情将是解决它的一种方法:

collected = {} # a dictionary of first-lines to list-of-lines
current = []
for line in f.readlines():
    if matcher.match( line ): #this will match the line
        # we're starting a new section
        if current: # is there anything in the old section?
            collected[ current[0] ] = current # organize by first line
        current = [ line ] # start a new list for the new section
    else:
        current.append( line )
print collected[ "ip sla 101" ]
于 2013-03-11T23:53:27.010 回答