1

我正在尝试创建一个 TextFSM 模板以按顺序从某些行中提取数据。

原始数据

Mod Ports Card Type                              Model              Serial No.
--- ----- -------------------------------------- ------------------ -----------
  1   24  CEF720 24 port 1000mb SFP              SS-X6724-SFP       ABC12312253
  2   48  CEF720 48 port 10/100/1000mb Ethernet  SS-X6748-GE-TX     ABC12312FW2
  5    2  Supervisor Engine 720 (Active)         SS-SUP720-3B       ABC12312X5B
  6    2  Supervisor Engine 720 (Hot)            SS-SUP720-3B       ABC123129Y5

Mod MAC addresses                       Hw    Fw           Sw           Status
--- ---------------------------------- ------ ------------ ------------ -------
  1  ffff.4a3e.ffff to ffff.4a3e.ffff   3.1   15.2(18r)S1  18.1(2)SY16  Ok
  2  ffff.584b.ffff to ffff.584b.ffff   2.6   15.2(14r)S5  18.1(2)SY16  Ok
  5  ffff.9df6.ffff to ffff.9df6.ffff   5.3   9.5(4)       18.1(2)SY16  Ok
  6  ffff.c848.ffff to ffff.c848.ffff   5.4   9.4(2)       18.1(2)SY16  Ok

Mod  Sub-Module                  Model              Serial       Hw     Status
---- --------------------------- ------------------ ----------- ------- -------
  1  Centralized Forwarding Card SS-F6700-CFC       ABC12312NDH  4.0    Ok
  2  Centralized Forwarding Card SS-F6700-CFC       ABC12312LKR  4.0    Ok
  5  Policy Feature Card 3       SS-F6K-PFC3B       ABC12312B3D  2.5    Ok
  5  MSFC3 Daughterboard         SS-SUP720          ABC12312B03  2.11   Ok
  6  Policy Feature Card 3       SS-F6K-PFC3B       ABC123123B6  2.3    Ok
  6  MSFC3 Daughterboard         SS-SUP720          ABC1231254K  3.0    Ok

Mod  Online Diag Status 
---- -------------------
  1  Pass
  2  Pass
  5  Pass
  6  Pass

试图获得

[
  {
    "CARDTYPE": "CEF720 24 port 1000mb SFP",
    "FW": "15.2(18r)S1",
    "HW": "3.1",
    "MODEL": "SS-X6724-SFP",
    "MODULE": "1",
    "PORT": "24",
    "SERIAL": "ABC12312253",
    "STATUS": "Ok",
    "SW": "18.1(2)SY16"
  },
  {
    "CARDTYPE": "CEF720 48 port 10/100/1000mb Ethernet",
    "FW": "15.2(14r)S5",
    "HW": "2.6",
    "MODEL": "SS-X6748-GE-TX",
    "MODULE": "2",
    "PORT": "48",
    "SERIAL": "ABC12312FW2",
    "STATUS": "Ok",
    "SW": "18.1(2)SY16"
  },
  {
    "CARDTYPE": "Supervisor Engine 720 (Active)",
    "FW": "9.5(4)",
    "HW": "5.3",
    "MODEL": "SS-SUP720-3B",
    "MODULE": "5",
    "PORT": "2",
    "SERIAL": "ABC12312X5B",
    "STATUS": "Ok",
    "SW": "18.1(2)SY16"
  },
  {
    "CARDTYPE": "Supervisor Engine 720 (Hot)",
    "FW": "9.4(2)",
    "HW": "5.4",
    "MODEL": "SS-SUP720-3B",
    "MODULE": "6",
    "PORT": "2",
    "SERIAL": "ABC123129Y5",
    "STATUS": "Ok",
    "SW": "18.1(2)SY16"
  }
]

实际输出

[
  {
    "CARDTYPE": "CEF720 24 port 1000mb SFP",
    "FW": "15.2(18r)S1",
    "HW": "3.1",
    "MODEL": "SS-X6724-SFP",
    "MODULE": "1",
    "PORT": "24",
    "SERIAL": "ABC12312253",
    "STATUS": "Ok",
    "SW": "18.1(2)SY16"
  },
  {
    "CARDTYPE": "",
    "FW": "15.2(14r)S5",
    "HW": "2.6",
    "MODEL": "",
    "MODULE": "",
    "PORT": "",
    "SERIAL": "",
    "STATUS": "Ok",
    "SW": "18.1(2)SY16"
  },
  {
    "CARDTYPE": "",
    "FW": "9.5(4)",
    "HW": "5.3",
    "MODEL": "",
    "MODULE": "",
    "PORT": "",
    "SERIAL": "",
    "STATUS": "Ok",
    "SW": "18.1(2)SY16"
  },
  {
    "CARDTYPE": "",
    "FW": "9.4(2)",
    "HW": "5.4",
    "MODEL": "",
    "MODULE": "",
    "PORT": "",
    "SERIAL": "",
    "STATUS": "Ok",
    "SW": "18.1(2)SY16"
  }
]

我使用下面的模板来获取输出。如您所见CARDTYPEMODEL, , MODULE, PORT,SERIAL在其他信息被正确提取的地方是空的。 TextFSM 模板

Value MODULE (\d+)
Value PORT (\d+)
Value CARDTYPE (.+?)
Value MODEL (\S+)
Value SERIAL (\w+)
Value HW (\S+)
Value FW (\S+)
Value SW (\S+)
Value STATUS (\S+)

Start
  ^Mod\s+Ports\s+Card\s+Type\s+Model\s+Serial -> Info  

Info
  ^\s+${MODULE}\s+${PORT}\s+${CARDTYPE}\s+${MODEL}\s+${SERIAL}\s*$$ -> Status

Status
  ^\s+\d+\s+(?:\S+\s+to\s+\S+)\s+${HW}\s+${FW}\s+${SW}\s+${STATUS}\s*$$ -> Continue.Record
  ^Mod\s+Sub-Module -> Start

End
4

0 回答 0