Tek-Tips is the largest IT community on the Internet today!

Members share and learn making Tek-Tips Forums the best source of peer-reviewed technical information on the Internet!

  • Congratulations SkipVought on being selected by the Tek-Tips community for having the most helpful posts in the forums last week. Way to Go!

Need a regex 4

Status
Not open for further replies.

netman4u

Technical User
Mar 16, 2005
176
0
0
US
I have the following list:

Code:
level 1,critical,router,0,323,322,323
level 1,critical,router,0,4,68,82
level 1,critical,router,0,37,0,37
level 1,normal,router,0,0,0,0
level 1,normal,server,0,3,2,3
level 1,normal,router,0,0,0,0
level 1,warning,router,0,20,19,20
level 1,warning,router,0,1,1,1
level 1,warning,router,0,0,0,0

I am looking for a regex that will filter out all lines that only have "0" between the commas.

keep:


Code:
level 1,critical,router,0,323,322,323
level 1,critical,router,0,4,68,82
level 1,critical,router,0,37,0,37
level 1,normal,server,0,3,2,3
level 1,warning,router,0,20,19,20
level 1,warning,router,0,1,1,1

Filter:

Code:
level 1,normal,router,0,0,0,0
level 1,normal,router,0,0,0,0
level 1,warning,router,0,0,0,0


Thanks


 
Is this too simple? :)
Code:
#!perl
use strict;
use warnings;

my @filtered = grep !/0,0,0,0/, <DATA>;
print @filtered;

__DATA__
level 1,critical,router,0,323,322,323
level 1,critical,router,0,4,68,82
level 1,critical,router,0,37,0,37
level 1,normal,router,0,0,0,0
level 1,normal,server,0,3,2,3
level 1,normal,router,0,0,0,0
level 1,warning,router,0,20,19,20
level 1,warning,router,0,1,1,1
level 1,warning,router,0,0,0,0
Output:
Code:
level 1,critical,router,0,323,322,323
level 1,critical,router,0,4,68,82
level 1,critical,router,0,37,0,37
level 1,normal,server,0,3,2,3
level 1,warning,router,0,20,19,20
level 1,warning,router,0,1,1,1
HTH


 
Code:
$line="level 1,warning,router,0,0,0,0";
if(substr $line,-8 ne ",0,0,0,0") {
   print FILE $line;
}
I don't like firing up the regex engine, or the powerful tools like grep, unless really needed, and given the spec, I don't think its needed here.

Just my €0.02
--Paul

cigless ...
 
I agree with Paul, sorry Mike.

Mike's code also has a minor mistake in that the first 0 in his expr is not preceded by a comma. This means that it will also filter lines that look like "router,250,0,0,0"


Michael Libeson
 
Mike's code also has a minor mistake in that the first 0 in his expr is not preceded by a comma. This means that it will also filter lines that look like "router,250,0,0,0"
Whoops, good point, Michael. [blush]
 
Thanks all,

Tried your Paul. Seems good but not working. Here is a code snippet:

Code:
	print "$sub_return\n";
	if(substr $sub_return,-8 ne ",0,0,0,0") {
		print LOG "$sub_return\n";
		return ($sub_return);
	}else{
		print "Skipped it\n";
	}

heres the output:

Code:
Level 1,critical,router,0,241,290,293
Level 1,critical,server,0,0,0,0
Level 1,critical,switch,0,9,9,9
Level 1,normal,router,0,3,2,3
Level 1,normal,server,0,0,0,0
Level 1,normal,switch,0,0,0,0
Level 1,warning,router,0,18,17,18
Level 1,warning,server,0,0,0,0
Level 1,warning,switch,0,0,0,0
Level 2,critical,router,0,0,0,0
Level 2,critical,server,0,0,0,0
Level 2,critical,switch,0,0,0,0
Level 2,normal,router,0,0,0,0
Level 2,normal,server,0,0,0,0
Level 2,normal,switch,0,0,0,0
Level 2,warning,router,0,0,0,0
Level 2,warning,server,0,0,0,0
Level 2,warning,switch,0,0,0,0
Level 3,critical,router,0,0,0,0
Level 3,critical,server,0,85,91,91
Level 3,critical,switch,0,0,0,0
Level 3,normal,router,0,0,0,0
Level 3,normal,server,0,0,0,0
Level 3,normal,switch,0,0,0,0
Level 3,warning,router,0,0,0,0
Level 3,warning,server,0,3,3,3
Level 3,warning,switch,0,0,0,0
Level 4,critical,router,0,0,0,0
Level 4,critical,server,0,0,0,0
Level 4,critical,switch,0,0,0,0
Level 4,normal,router,0,0,0,0
Level 4,normal,server,0,0,0,0
Level 4,normal,switch,0,0,0,0
Level 4,warning,router,0,0,0,0
Level 4,warning,server,0,0,0,0
Level 4,warning,switch,0,0,0,0
Level 5,critical,router,0,0,0,0
Level 5,critical,server,0,0,0,0
Level 5,critical,switch,0,0,0,0
Level 5,normal,router,0,0,0,0
Level 5,normal,server,0,0,0,0
Level 5,normal,switch,0,0,0,0
Level 5,warning,router,0,0,0,0
Level 5,warning,server,0,0,0,0
Level 5,warning,switch,0,0,0,0

never see "Skipped it"

I got a Biz Degree! How the h*ll did I get here?
 
make sure the line has been chomped if necessary before doing the substr(), and I think you will need some () in there:

Code:
if ((substr $sub_return,,-7) ne "0,0,0,0") {
   print LOG "$sub_return\n";
   ....
 
edit:

Code:
if ((substr $sub_return,-7) ne "0,0,0,0") {
   print LOG "$sub_return\n";
   ....

had an extra comma after $sub_return in the first post
 
This what you need?

The "data.lst" is a copy&paste from your values here.
Best regards,
NMA

bash-2.03# cat stript_data.pl
#!/usr/bin/perl

use warnings;
use strict;

open (DATA, "<", "data.lst") or die ("cannot open data!\n");
foreach (<DATA>) {
if ( $_ !~ /0,0,0,0$/ ) {
print $_;
} else {
print "Outa here!\n";
}
}
close (DATA) or die ("cannot close data!\n");

Testing...
bash-2.03# ./stript_data.pl
Level 1,critical,router,0,241,290,293
Outa here!
Level 1,critical,switch,0,9,9,9
Level 1,normal,router,0,3,2,3
Outa here!
Outa here!
Level 1,warning,router,0,18,17,18
Outa here!
Outa here!
Outa here!
Outa here!
Outa here!
Outa here!
Outa here!
Outa here!
Outa here!
Outa here!
Outa here!
Outa here!
Level 3,critical,server,0,85,91,91
Outa here!
Outa here!
Outa here!
Outa here!
Outa here!
Level 3,warning,server,0,3,3,3
Outa here!
Outa here!
Outa here!
Outa here!
Outa here!
Outa here!
Outa here!
Outa here!
Outa here!
Outa here!
Outa here!
Outa here!
Outa here!
Outa here!
Outa here!
Outa here!
Outa here!
Outa here!
Outa here!
bash-2.03#
 
Status
Not open for further replies.

Part and Inventory Search

Sponsor

Back
Top