我正在尝试创建一个 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"
}
]
我使用下面的模板来获取输出。如您所见CARDTYPE
,MODEL
, , 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