Visit Our UNIX and Linux User Community


Perl Regex problem


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting Perl Regex problem
# 1  
Old 11-14-2016
Perl Regex problem

Script logs into switches on my list but nothing seems to happen.

Following error:
Code:
[ 5.546199] tr nope, doesn't (yet) match (?-xism:[\/a-zA-Z0-9._\[\]-]+ ?(?:\(config[^)]*\))? ?[#>] ?$)
[ 5.550072] du SEEN:

Here is code in question:
Code:
        @version_info = $session_obj->cmd('term length 0');
        $session_obj->cmd('show int | i proto.*notconnect|proto.*administratively down|Last in.* [6-9]w|Last in.*[0-9][0-9]w|[0-9]y|disabled|Last input never, output never, output hang never');
        $session_obj->cmd('conf t');
         foreach (@version_info) {
                 if ($_ =~ /(.*) is down/) {
                        $_ = $1;
                        #print $_;
                        $session_obj->cmd('conf t');
                        $session_obj->cmd("int $_");
                        $session_obj->cmd('shutdown');
               }
              }
        $session_obj->cmd('exit');
        $session_obj->close;


Last edited by mrlayance; 11-14-2016 at 11:25 AM.. Reason: Changed ICODE tags to just CODE tags
# 2  
Old 11-14-2016
Show the input you get and the output you want.

I'm not sure that code is actually doing what you want, either. I'm guessing you want to send 'show int' to the switch, and have Perl filter the rest? Or is the command you enter in the switch LITERALLY show int | i proto.* ... because that's what I think is happening here.

Last edited by Corona688; 11-14-2016 at 02:31 PM..
# 3  
Old 11-14-2016
Quote:
Originally Posted by Corona688
Show the input you get and the output you want.

I'm not sure that code is actually doing what you want, either. I'm guessing you want to send 'show int' to the switch, and have Perl filter the rest? Or is the command you enter in the switch LITERALLY show int | i proto.* ... because that's what I think is happening here.
I think I know the issue.

The show command shows all ports that match the criteria.

GigabitEthernet1/0/3 is down, line protocol is down (notconnect)
Last input never, output never, output hang never
Last input 17w0d, output 00:00:00, output hang never
Last input 38w0d, output 00:00:00, output hang never
Last input 48w5d, output 00:00:00, output hang never
Last input 1y27w, output 00:00:00, output hang never
GigabitEthernet1/0/18 is down, line protocol is down (notconnect)
Last input never, output 6w6d, output hang never

Those results go into a array. I can not figure out how to trim the array results to say, GigabitEthernet1/0/3
# 4  
Old 11-14-2016
OK, that's the input you have. Now, show the output you want.

I'm not sure what the error you posted has to do with anything, is that a log entry or a perl error, and what do you want done with it?
# 5  
Old 11-14-2016
Quote:
Originally Posted by Corona688
OK, that's the input you have. Now, show the output you want.

I'm not sure what the error you posted has to do with anything, is that a log entry or a perl error, and what do you want done with it?
How would I trim the results in my array from a result of a match? Would I do that before with a new array? Totally lost.
Code:
 
 foreach (@version_info) {
                 if ($_ =~ /(.*) is down, line protocol is down \(notconnect\)(.*)/) {
                         $session_obj->cmd('conf t');
                         $session_obj->cmd('int $_);
                         $session_obj->cmd('shutdown');
                         $session_obj->cmd('exit');
                 };
               };

# 6  
Old 11-14-2016
Hi,

try like below:
Code:
#!/usr/bin/perl -w

my @a = ("hi", "hello", "GigabitEthernet1/0/3 is down, line protocol is down (notconnect)");

foreach (@a) {
if ( $_ =~ /(.*) is down,.*/) {
        print "$1\n";
}
}

In your case
Code:
$session_obj->cmd('int $1);

This User Gave Thanks to greet_sed For This Post:

Previous Thread | Next Thread
Test Your Knowledge in Computers #314
Difficulty: Easy
Pointers were not used in the original C programming language and were added later in in C++.
True or False?

10 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

Perl, RegEx - Help me to understand the regex!

I am not a big expert in regex and have just little understanding of that language. Could you help me to understand the regular Perl expression: ^(?!if\b|else\b|while\b|)(?:+?\s+){1,6}(+\s*)\(*\) *?(?:^*;?+){0,10}\{ ------ This is regex to select functions from a C/C++ source and defined in... (2 Replies)
Discussion started by: alex_5161
2 Replies

2. UNIX for Advanced & Expert Users

Perl regex problem on strings with several occurences of one char

Hi all, i have the following line in a record file : retenu=non demande=non script=#vtbackup /path=/save/backup/demande position=140+70 and i want to use Perl regex to have the following output key : "retenu" value : "non" key : "demande" value "non" key : "script" value :... (2 Replies)
Discussion started by: Fundix
2 Replies

3. Shell Programming and Scripting

?= in perl regex

Could anyone please make me understand how the ?= works below .. After executing this I am getting the same output. $string="I love chocolate."; $string =~ s/chocolate(?= ice)/vanilla/; print "$string\n"; (2 Replies)
Discussion started by: scriptscript
2 Replies

4. Programming

Perl regex

Hello folks, Looking for a quick help on regex in my perl script. here's the string i want to parse and get the 2nd field out of it. $str = " 2013-08-07 12:29 Beta ACTIVE"; I want to extract 'Beta' out of this string. This string will keep on changing... (2 Replies)
Discussion started by: jhamaks
2 Replies

5. Programming

Perl regex

Hi Guys I have the following regex $OSRELEASE = $1 if ($output =~ /(Mac OS X (Server )?10.\d)/); output is currently Mac OS X 10.7.5 when the introduction of Mac 10.8 output changes to OS X 10.8.2 they have dropped the Mac bit so i changed the regex to be (2 Replies)
Discussion started by: ab52
2 Replies

6. Programming

Perl regex

HI, I'm new to perl and need simple regex for reading a file using my perl script. The text file reads as - filename=/pot/uio/current/myremificates.txt certificates=/pot/uio/current/userdir/conf/user/gamma/settings/security/... (3 Replies)
Discussion started by: jhamaks
3 Replies

7. UNIX for Dummies Questions & Answers

Perl Regex Help!!!

Hi, I get the following when I cat a file *.log xxxxx ===== dasdas gwdgsg fdsagfsag agsdfag ===== random data ===== My output should look like : If the random data after the 2nd ==== is null then OK should be printed else the random data should be printed. How do I go about this... (5 Replies)
Discussion started by: manutd
5 Replies

8. Shell Programming and Scripting

Converting perl regex to sed regex

I am having trouble parsing rpm filenames in a shell script.. I found a snippet of perl code that will perform the task but I really don't have time to rewrite the entire script in perl. I cannot for the life of me convert this code into something sed-friendly: if ($rpm =~ /(*)-(*)-(*)\.(.*)/)... (1 Reply)
Discussion started by: suntzu
1 Replies

9. Shell Programming and Scripting

Perl regex

I have got numbers like l255677 l376039 l188144 l340482 l440700 l254113 to match the numbers starting with '13' what would be the regex =~/13(.*)/ =======>This is not working .... But for user123,user657 regex =~/user(.*)/ ========>works Thanks for help..!! (7 Replies)
Discussion started by: trina_1
7 Replies

10. Shell Programming and Scripting

Perl REGEX

Hi, Can anyone help me to find regular expression for the following in Perl? "The string can only contain lower case letters (a-z) and no more than one of any letter." For example: "table" is accepted, whether "dude" is not. I have coded like this: $str = "table"; if ($str =~ m/\b()\b/) {... (4 Replies)
Discussion started by: evilfreakz
4 Replies

Featured Tech Videos