[ale] Perl Question

Ken Nagorski kenn at pcintelligent.com
Mon Oct 16 15:57:50 EDT 2000


My fault, I didn;t make myself clear, he-he "your original plea"

Ken
On Mon, 16 Oct 2000, Danny Cox wrote:

> On Mon, 16 Oct 2000, Ken Nagorski wrote:
> 
> > But checking the next line wasn't the problem, if the pattern matched I
> > wanted to line above it and below it. See why redo didn't help? Even
> > though I solved my current problem I would still love to know how to do
> > this.
> 
> 	Ah!  In your original plea, you only wanted to print the matching
> line, and the line after it.  'grep -2 ...' is equivalent to 'grep -A2 -B2
> ...'.
> > >     
> > >         Suguestions to use system to call grep from perl are almost as 
> > > bad as using cat to pipe files to grep on the command line. :)
> 
> 	Almost, but not quite ;-).
> 
> 	How about:
> 
> 	$prev = '';
> 	$print_next = 0;
> 	while (<>) {
> 		if (/pattern/) {
> 			print $prev, $_;
> 			$print_next = 1;
> 		}
> 		elsif ($print_next) {
> 			print;
> 			$print_next = 0;
> 		}
> 		$prev = $_;
> 	}
> 
> 	?  I've not texted it, but it should be close!
> 
> 	Another thought, but may require lots of memory:
> 
> 	@lines = <>;
> 
> 	for ($i = 0; $i < $#lines; ++$i) {
> 		if ($lines[$i] =~ /pattern/) {
> 			print $lines[$i-1];
> 			print $lines[$i];
> 			print $lines[$i+1];
> 		}
> 	}
> 
> 	I don't check for $i out-of-bounds.  I don't know what you wish to
> print if the first line matches, for example.
> 
> Danny
> 

--
To unsubscribe: mail majordomo at ale.org with "unsubscribe ale" in message body.





More information about the Ale mailing list