Hi All,

I'm trying to cut my teeth on doing some pattern matching for a project I am working on for my job. As an exercise I have a written a script which telnets into a Cisco router and should return an inventory of all of the T1 interfaces on that device, making a note of which interfaces are voice PRIs.

To check for an interface I show the running configuration filtered by sections which contain the line controller T1. The problem I'm running into is the code is only returning the first match of the four interfaces that are on the router I am testing with.

Here is my code below:
use Net::Ping; use Net::Telnet::Cisco; use Getopt::Long; my $host = ""; my $interface = ""; my $PRIList = ""; my $T1List = ""; my $T1Count = 0; my $PRICount = 0; GetOptions("host:s" => \ $host); if (!$host) { print "usage: perl regexp_test.pl --host=(IPAddress)"; exit; } my $p = Net::Ping->new(); if ($p->ping($host)) { print "\nDevice is online, connecting...\n\n"; my $session = Net::Telnet::Cisco->new(Host => $host); $session->login('user', 'password'); $session->cmd("term len 0"); print "Retrieving T1 controller details...\n\n"; my @check = $session->cmd("sh run | s controller T1"); print "@check\n"; while (<@check>) { # match an interface number e.g. 0/0/0, 0/1/0, etc if (m^\G[0-9]/[0-9]/[0-9]^) { $interface = $_; $T1Count++; $T1List = join ($T1List,$interface,"\n"); } # check if the interface is a PRI (pri-group timeslots 1-24) if (m^\Gpri-group^) { $PRICount++; $PRIList = join ($PRIList,$interface,"\n"); } } if ($T1Count > 0) { print "T1 Controller Summary:\n\n"; print "$T1Count total T1 interfaces\n"; print $T1List; print "$PRICount total voice PRI(s)\n"; print $PRIList; } else { print "No T1 interfaces found"; } $session->close; } else { print "\nDevice OFFLINE!! Connection aborted!!\n\n"; } $p->close();
Here is the output from the script as it is now:
C:\perl scripts>perl regexp_test.pl --host 10.22.49.19 Device is online, connecting... Retrieving T1 controller details... controller T1 0/0/0 framing esf linecode b8zs cablelength long 0db pri-group timeslots 1-24 controller T1 0/0/1 framing esf linecode b8zs cablelength long 0db controller T1 0/1/0 framing esf linecode b8zs cablelength long 0db controller T1 0/1/1 framing esf linecode b8zs cablelength long 0db T1 Controller Summary: 1 total T1 interfaces 0/0/0 1 total voice PRI(s) 0/0/0
Based on the return of the output of the show command I am expecting the output to be this:
C:\perl scripts>perl regexp_test.pl --host 10.22.49.19 Device is online, connecting... Retrieving T1 controller details... controller T1 0/0/0 framing esf linecode b8zs cablelength long 0db pri-group timeslots 1-24 controller T1 0/0/1 framing esf linecode b8zs cablelength long 0db controller T1 0/1/0 framing esf linecode b8zs cablelength long 0db controller T1 0/1/1 framing esf linecode b8zs cablelength long 0db T1 Controller Summary: 4 total T1 interfaces 0/0/0 0/0/1 0/1/0 0/1/1 1 total voice PRI(s) 0/0/0
Any ideas what I am doing wrong that I'm not getting the desired output? Any help you can provide is greatly appreciated.

In reply to Regular Expressions question by CJXJ220

Title:
Use:  <p> text here (a paragraph) </p>
and:  <code> code here </code>
to format your post, it's "PerlMonks-approved HTML":



  • Posts are HTML formatted. Put <p> </p> tags around your paragraphs. Put <code> </code> tags around your code and data!
  • Titles consisting of a single word are discouraged, and in most cases are disallowed outright.
  • Read Where should I post X? if you're not absolutely sure you're posting in the right place.
  • Please read these before you post! —
  • Posts may use any of the Perl Monks Approved HTML tags:
    a, abbr, b, big, blockquote, br, caption, center, col, colgroup, dd, del, details, div, dl, dt, em, font, h1, h2, h3, h4, h5, h6, hr, i, ins, li, ol, p, pre, readmore, small, span, spoiler, strike, strong, sub, summary, sup, table, tbody, td, tfoot, th, thead, tr, tt, u, ul, wbr
  • You may need to use entities for some characters, as follows. (Exception: Within code tags, you can put the characters literally.)
            For:     Use:
    & &amp;
    < &lt;
    > &gt;
    [ &#91;
    ] &#93;
  • Link using PerlMonks shortcuts! What shortcuts can I use for linking?
  • See Writeup Formatting Tips and other pages linked from there for more info.