TextFSM - sjherrick/code-base GitHub Wiki

TextFSM

https://github.com/google/textfsm/wiki

Python

import textfsm

template = open('template.textfsm')
re_table = textfsm.TextFSM(template)
fsm_results = re_table.ParseText(raw_text_data)

Templates

  • Filldown- Carries the value over to subsequent entries if same field is blank
Value Filldown SWITCHNAME (\w+\.\w+) 

Example

# Carry down the local end information so that it is present on each row item.
Value SWITCHNAME (\w+\.\w+) 
Value PLATFORM (.*)
Value LOCALIF (\w+)
Value LOCALPORT (0/0?/?\d+)
Value REMOTEIF (\w+)
Value REMOTEPORT ([0|1]/[0|1]?/?\d+)
Value MGMTIP (\d+(\.\d+){3})

Start  
  ^Device ID: ${SWITCHNAME}\.\w+
  ^\s+IP address: ${MGMTIP}
  ^Platform: cisco ${PLATFORM},
  ^Interface: ${LOCALIF}${LOCALPORT},  Port ID \(outgoing port\): ${REMOTEIF}${REMOTEPORT} -> Record

# Last record is already recorded then skip doing so here.
EOF
  • Output
['CISCO-TEST', 'ME-3400E-24TS-M', 'GigabitEthernet', '0/0/12', 'GigabitEthernet', '0/1', '192.168.0.1'], ['CISCO-TEST', 'ME-3400E-24TS-M', 'GigabitEthernet', '0/0/13', 'GigabitEthernet', '0/1', '192.168.0.2'](/sjherrick/code-base/wiki/'CISCO-TEST',-'ME-3400E-24TS-M',-'GigabitEthernet',-'0/0/12',-'GigabitEthernet',-'0/1',-'192.168.0.1'],-['CISCO-TEST',-'ME-3400E-24TS-M',-'GigabitEthernet',-'0/0/13',-'GigabitEthernet',-'0/1',-'192.168.0.2')