[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[ale] Perl Question
- Subject: [ale] Perl Question
- From: kenn at pcintelligent.com (Ken Nagorski)
- Date: Mon, 16 Oct 2000 15:57:50 -0400 (EDT)
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.