#!/usr/bin/perl # SYNOPSIS: Scan mailfile for message (and number) having pattern. # then use mail -f mailfile, or vi mailfile # AUTHOR: GPL(C) http://www.cs.albany.edu/~mosh $usage= 'USAGE: grepmail pattern mailfile | more'; my( $subject, $from, $messagenum, $pattern, $message, $found, $show_message); my $fancy = '@@@'; my $fance = '@@@'; if( ($ENV{ "TERM" } eq "xterm") ){ $fancy = "\033[31m"; $fance = "\033[39m"; } $pattern = shift || die $usage . "; No pattern?\n"; while( <> ){ # Start of new message? if( m/^from (.+)/i ){ $from = $1; ++$messagenum; $subject = $found = $message = ''; } $message .= $_; # Save message in case found later. $subject = $1 if m/^Subject:\s*(.*)/; # Line has our pattern? if( s/$pattern/$fancy$&$fance/io && !$found++ ){ print "\n[Message $fancy $messagenum $fance in file $ARGV on line $.]\n"; printf "From: %s\n" ."Subject: %s\n" ."%s[found]\n", $from, $subject, $_; print $message if $show_message; } elsif( $found ){ print $_ if $show_message; } }