0

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!

Belabacsi
  • 121
  • 2
  • 10

0 Answers0