Hello Developer Community!
I would like to ask for some help about a regular expression used in TextFSM parser. I have the following configuration lines what I would like to parse with TextFSM:
Sample data:
set applications application tcp_1592_TimeOUT_24h protocol tcp
set applications application tcp_1592_TimeOUT_24h destination-port 1592
set applications application tcp_1592_TimeOUT_24h inactivity-timeout 86400
set applications application tcp_3268 protocol tcp
set applications application tcp_3268 destination-port 3268
Some lines have "inactivity-timeout" parameter defined, some do not. I have been trying to use the below TextFSM regular expression to parse the sample data.
TextFSM
Value set_application_name ((\".+\")|\S+)
Value set_application_protocol ((\".+\")|\S+)
Value set_application_port ((\d+\-\d+)|(\d+))
Value set_application_inactivity_timeout (\d+|\S+)
Value set_application_NotParsed (.+)
Start
^set applications application ${set_application_name} protocol ${set_application_protocol}
^set applications application ${set_application_name} destination-port ${set_application_port} -> Record
^set applications application ${set_application_name}( inactivity-timeout ${set_application_inactivity_timeout}|${set_application_NotParsed}*)* -> Record
Expected result:
{
"set_application_NotParsed": "",
"set_application_inactivity_timeout": "86400",
"set_application_name": "tcp_1592_TimeOUT_24h",
"set_application_port": "1592",
"set_application_protocol": "tcp"
},
{
"set_application_NotParsed": "",
"set_application_inactivity_timeout": "",
"set_application_name": "tcp_3268",
"set_application_port": "3268",
"set_application_protocol": "tcp"
},
However, I have got the below result. My problem is that, I have the entry named "tcp_1592_TimeOUT_24h" duplicated. The second one contains only the "inactivity-timeout" parameter.
Actual result:
{
"set_application_NotParsed": "",
"set_application_inactivity_timeout": "",
"set_application_name": "tcp_1592_TimeOUT_24h",
"set_application_port": "1592",
"set_application_protocol": "tcp"
},
{
"set_application_NotParsed": "",
"set_application_inactivity_timeout": "86400",
"set_application_name": "tcp_1592_TimeOUT_24h",
"set_application_port": "",
"set_application_protocol": ""
},
{
"set_application_NotParsed": "",
"set_application_inactivity_timeout": "",
"set_application_name": "tcp_3268",
"set_application_port": "3268",
"set_application_protocol": "tcp"
},
I have played a lot with different regular expressions (capture groups, (No)Records, lookaheads, etc...) but with no luck :-(
Could anyone please point me to the right direction how to modify my TextFSM parser to get the expected result?
Thank You very much in advance!