我该如何排除或包含某些行

时间:2013-03-08 14:13:11

标签: regex expect cisco

这是cisco命令SWEs-elmPCI-A-01#show cdp neighbors

的输出
Capability Codes: R - Router, T - Trans Bridge, B - Source Route Bridge
                  S - Switch, H - Host, I - IGMP, r - Repeater, P - Phone,
                  D - Remote, C - CVTA, M - Two-port Mac Relay

Device ID        Local Intrfce     Holdtme    Capability  Platform  Port ID
SWEx-elmPCI-A-02.lssh.com
                 Gig 2/0/1         137             R S I  WS-C3750X Gig 1/0/1
SWEx-elmPCI-A-02.lssh.com
                 Gig 2/0/1         138             R S I  WS-C3750X Gig 1/0/1

SWEa-elmPCI-02   Gig 1/0/4         169               T    AIR-LAP12 Gig 0
SWEa-elmPCI-01   Gig 1/0/9         170               T    AIR-LAP11 Gig 0

我怎样才能只获得包含SWEx-elmPCI-A-02.lssh.com行及其详细信息Gig 2/0/1 137 R S I WS-C3750X Gig 1/0/1

的行

注意:Gig 2/0/1 137 R S I WS-C3750X Gig 1/0/1之前有空格 和Gig 2/0/1 138 R S I WS-C3750X Gig 1/0/1以及S - Switch, H - Host, I - IGMP, r - Repeater, P - Phone, D - Remote, C - CVTA, M - Two-port Mac Relay

我可以使用expect或者ciso regex.i我正在使用expect脚本在cisco上做一些任务所以我也可以在那里使用一些命令(比如include,exclude)或者在我的期望代码中。我只需要搜索SWEx及其相应的条目,如Gig 1/0/4,以便我可以放 Gig和1/0/4在某个变量中,并将其用于每个SWEx ..行

1 个答案:

答案 0 :(得分:1)

以下内容应该有效:

/^(SWEx-elmPCI-A-02\.lssh\.com)\s+(.*?)\s{2,}(\d+)\s+(.*?)\s{2,}([^\s]+)\s+(.*?)$/gsm

将创建6个组:

  1. 设备ID
  2. 本地界面
  3. 保持时间
  4. 能力
  5. 平台
  6. 端口ID

  7. Demo


    匹配

    MATCH 1

    1. SWEx-elmPCI-A-02.lssh.com
    2. Gig 2/0/1
    3. 137
    4. R S I
    5. WS-C3750X
    6. Gig 1/0/1
    7. MATCH 2

      1. SWEx-elmPCI-A-02.lssh.com
      2. Gig 2/0/1
      3. 138
      4. R S I
      5. WS-C3750X
      6. Gig 1/0/1