【问题标题】:Python - Extract data from network console outputPython - 从网络控制台输出中提取数据
【发布时间】:2021-07-28 09:21:44
【问题描述】:

我正在尝试了解网络自动化,我需要从 2-3 个不同的 cisco 设备中获取设备型号详细信息。

我在 python 中使用 paramiko 在设备上运行我的命令,作为回报,我只想从控制台输出中提取设备型号名称。

输出示例:

设备1-

PID: DEV1-123CE-D3T        ,  VID:    unimportant string   ,  SN: 1

PID: DEV1-123CE-D3T        ,  VID:    unimportant string   ,  SN: 1

设备2-

PID:                       ,  VID:    unimportant string   ,  SN: 1

PID: ABC2-123CE-D3T        ,  VID:    unimportant string   ,  SN: 1

设备3-

PID: XYZ3-456DF-A1N                      ,  VID:    unimportant string   ,  SN: 1

PID: XYZ3-456DF-A1N                      ,  VID:    unimportant string   ,  SN: 1

我只需要 PID 的详细信息。如果第一行的 PID 为空,则代码应在输出中搜索第二个 PID 并发布匹配项。

到目前为止,我所拥有的代码的相关部分仅在第一行中搜索数据并返回“无”值 -

stdout = stdout.readlines()

lines = list(islice(stdout, 2))
for line in lines:    
    result = re.findall('PID:(.*)\t\t,', line)    
    print(result)

我需要对我的代码进行哪些更改才能获得所需的输出?

提前致谢!

【问题讨论】:

    标签: python python-3.x regex


    【解决方案1】:

    你可以使用

    m = re.search(r'\bPID:\s*([^\s,]+)', line)
    if m:
        print(m.group(1))
    

    请参阅regex demo

    \bPID:\s*([^\s,]+) 正则表达式匹配

    • \b - 单词边界
    • PID: - 固定字符串
    • \s* - 零个或多个空格
    • ([^\s,]+) - 第 1 组:一个或多个除逗号和空格之外的字符。
    • \bPID:\s*([^\s,]+)

    要查找字符串中的所有值,请继续使用findall

    re.findall(r'\bPID:\s*([^\s,]+)', line)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-10-30
      • 1970-01-01
      • 1970-01-01
      • 2020-12-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-05-26
      相关资源
      最近更新 更多