首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >python-textFSM解析多行

python-textFSM解析多行
EN

Stack Overflow用户
提问于 2021-10-13 14:49:12
回答 1查看 36关注 0票数 0

我必须解析一个isis数据库,并且我有pb来捕获一些指标。

我的模板是:

代码语言:javascript
复制
Value Required LSPID (.*\.\d+\-00)
Value OVERLOAD_BIT ([0,1])
Value HOSTNAME (.*)
Value IPADD (\d+\.\d+\.\d+\.\d+)
Value List CONNECTED_METRIC (\d+)
Value List LSPID_PEER (.*)
Value List SUBNET_METRIC (\d+)
Value List SUBNET (\d+\.\d+\.\d+\.\d+\/\d+)

Start
        ^${LSPID}.*[0,1]/[0,1]/${OVERLOAD_BIT}
        ^\s+Hostname:\s+${HOSTNAME}
        ^\s+IP\s+Address:\s+${IPADD} -> Metrics

Metrics
        ^\s+Metric:\s+${CONNECTED_METRIC}\s+IS-Extended\s+${LSPID_PEER}
        ^\s+Metric:\s+${SUBNET_METRIC}\s+IP\s+${SUBNET} -> Record Start

我要解析的数据是:

代码语言:javascript
复制
ROUTER_A.00-00  0x00020850   0xE97D        1122              0/0/0
  Area Address: 49.0001
  NLPID:        0xCC 
  Hostname: ROUTER_A
  IP Address:   172.17.32.2
  Metric: 1000       IS-Extended ROUTER_D.00
  Metric: 100        IS-Extended ROUTER_E.00
  Metric: 100        IS-Extended ROUTER_F.00
  Metric: 1          IP 172.17.32.2/32
  Metric: 1          IP 172.25.9.142/32
ROUTER_B.00-00       0x00064747   0x27E9        1183              0/0/0
  Area Address: 49
  NLPID:        0xCC 
  Hostname: ROUTER_B
  Metric: 1000000    IS-Extended ROUTER_G.00
  Metric: 1000000    IS-Extended ROUTER_H.00
  IP Address:   192.168.12.51
  Metric: 0          IP 172.25.92.155/32
  Metric: 0          IP 192.168.12.51/32
ROUTER_C.00-00    0x0006B0C0   0x4632        1113              0/0/1
  Area Address: 49.0001
  NLPID:        0xCC 
  Hostname: ROUTER_C
  Router ID:    192.168.128.131
  IP Address:   172.25.92.62
  Metric: 10000      IS-Extended ROUTER_I.00
  Metric: 50000      IS-Extended ROUTER_J.00
  Metric: 1          IP 172.25.92.62/32
  Metric: 1          IP 192.168.128.131/32
ROUTER_K.00-00  0x00020850   0xE97D        1122              0/0/0
  Area Address: 49.0001
  NLPID:        0xCC 
  Hostname: ROUTER_K
  IP Address:   172.17.72.2
  Metric: 1000       IS-Extended ROUTER_D.00
  Metric: 100        IS-Extended ROUTER_E.00
  Metric: 100        IS-Extended ROUTER_F.00

我得到的结果是:

代码语言:javascript
复制
['ROUTER_A.00-00', '0', 'ROUTER_A', '172.17.32.2', ['1000', '100', '100'], ['ROUTER_D.00', 'ROUTER_E.00', 'ROUTER_F.00'], ['1'], ['172.17.32.2/32']]
['ROUTER_B.00-00', '0', 'ROUTER_B', '192.168.12.51', ['1000000', '1000000'], ['ROUTER_G.00', 'ROUTER_H.00'], ['0'], ['172.25.92.155/32']]
['ROUTER_C.00-00', '1', 'ROUTER_C', '172.25.92.62', ['10000', '50000'], ['ROUTER_I.00', 'ROUTER_J.00'], ['1'], ['172.25.92.62/32']]
['ROUTER_K.00-00', '0', 'ROUTER_K', '172.17.72.2', ['1000', '100', '100'], ['ROUTER_D.00', 'ROUTER_E.00', 'ROUTER_F.00'], [], []]

我们可以看到,只解析了第一个"ip指标“(例如,没有解析ip地址172.25.9.142/32 )。你能帮我找出哪里不对劲吗?

EN

回答 1

Stack Overflow用户

发布于 2021-10-15 05:56:33

我做了一个变通办法:我编辑了数据文件,并在fsm模板中插入了一个与之匹配的标签。

所以现在我有了这个模板,它工作得很好,但是如果有人有避免编辑源文件的解决方案,它将比这个变通方法更聪明:

代码语言:javascript
复制
Value Required LSPID (.*\.\d+\-00)
Value OVERLOAD_BIT ([0,1])
Value HOSTNAME (.*)
Value IPADD (\d+\.\d+\.\d+\.\d+)
Value List CONNECTED_METRIC (\d+)
Value List LSPID_PEER (.*)
Value List SUBNET_METRIC (\d+)
Value List SUBNET (\d+\.\d+\.\d+\.\d+\/\d+)
Value END_LSPID (END_LSPID)

Start
        ^${LSPID}.*[0,1]/[0,1]/${OVERLOAD_BIT}
        ^\s+Hostname:\s+${HOSTNAME}
        ^\s+IP\s+Address:\s+${IPADD} -> Metrics

Metrics
        ^\s+Metric:\s+${CONNECTED_METRIC}\s+IS-Extended\s+${LSPID_PEER}
        ^\s+Metric:\s+${SUBNET_METRIC}\s+IP\s+${SUBNET}
        ^${END_LSPID} -> Record Start
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69557676

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档