#!/usr/bin/perl # # wingrep - look for a regular expression within a file # # ANSI escape sequences: BOLD \e[1;39m # NORMAL \e[0;39m # GREEN \e[1;32m # RED \e[1;31m # REVERSE \e[0;7m # NORMAL \e[0;27m # $usage = "Usage: wingrep [-c [-p pattern] [-f file]]\n". " -p pattern Specify regular expression to use\n". " -f file Specify file to open (\"-\" means STDIN)\n". " -r Print matches in reverse\n"; use Getopt::Std; use Win32::Console; getopts('p:f:r') or die $usage; # Process switches $pattern = ($opt_p) ? $opt_p : 'Linux'; if ($opt_f) { open(FILE,"<$opt_f") or die "ERROR: $!"; # Open input file } else { open(FILE,"<-") or die "ERROR: $!"; # Open STDIN for reading } $STDOUT = new Win32::Console(STD_OUTPUT_HANDLE); $STDOUT->Title("Wingrep"); $normattr = $STDOUT->Attr(); $ct = 0; $| = 1; while () { if (/$pattern/) { $ct += s/($pattern)/\1/g; if ($opt_r) { $var = $_; while($var =~ /($pattern)/) { print $`; $STDOUT->Attr($FG_YELLOW | $BG_BLUE); print $1; $STDOUT->Attr($normattr); $var = $'; } print $var; } else { print; } } } print "Pattern \"$pattern\" found $ct times.\n"; close(FILE);