X-Git-Url: http://gb7djk.dxcluster.net/gitweb/gitweb.cgi?a=blobdiff_plain;f=perl%2Fgrepdbg;h=06f7df635d630e44944a7154cc6243e2038e4823;hb=d235b0d777f1a90c65d5dcf8cd6adaeb9f2b7e99;hp=80a918a07cc7a0a6a998d15240dd26746711bd75;hpb=d74590246854a9aa8783b2548196153f4ad7c985;p=spider.git diff --git a/perl/grepdbg b/perl/grepdbg index 80a918a0..06f7df63 100755 --- a/perl/grepdbg +++ b/perl/grepdbg @@ -12,7 +12,9 @@ # ten lines including the line matching the regular expression. # # is the regular expression you are searching for, -# a caseless search is done +# a caseless search is done. There can be more than one +# a preceeded by a '!' is treated as NOT . Each +# is implcitly ANDed together. # # If you specify something that likes a filename and that filename # has a .pm on the end of it and it exists then rather than doing @@ -47,8 +49,9 @@ $fp = DXLog::new('debug', 'dat', 'd'); $today = $fp->unixtoj(time()); my $nolines = 1; my @prev; +my @patt; -for my $arg (@ARGV) { +foreach my $arg (@ARGV) { if ($arg =~ /^-/) { $arg =~ s/^-//o; if ($arg =~ /^\s*\-+(?:[h\?]e?l?p?)/) { @@ -68,12 +71,11 @@ for my $arg (@ARGV) { die "$arg not found"; } } else { - $string = $arg; - last; + push @patt, $arg; } } -$string ||= '.*'; +push @patt, '.*' unless @patt; push @list, "0" unless @list; for my $entry (@list) { @@ -104,7 +106,17 @@ sub process chomp $line; push @prev, $line; shift @prev while @prev > $nolines; - if ($line =~ m{$string}io) { + my $flag = 0; + foreach my $p (@patt) { + if ($p =~ /^!/) { + my $r = substr $p, 1; + last if $line =~ m{$r}i; + } else { + last unless $line =~ m{$p}i; + } + ++$flag; + } + if ($flag == @patt) { for (@prev) { s/([\x00-\x1f\x7f-\xff])/sprintf("\\x%02X", ord($1))/eg; my ($t, $l) = split /\^/, $_, 2; @@ -117,6 +129,6 @@ sub process sub usage { - die "usage: grepdbg [nn days before] [-nnn lines before] [|]\n"; + die "usage: grepdbg [nn days before] [-nnn lines before] [] [|!]...\n"; } exit(0);