Sponsored Content
Top Forums Shell Programming and Scripting Perl script to match a pattern and print lines Post 302269881 by summer_cherry on Friday 19th of December 2008 12:20:37 AM
Old 12-19-2008
Hi, below package contains serverl method, 'getLinesAfterString' may address your issue.

Code:
package LeoFile;
sub new{
	return bless {};
}
sub _open{
	my $file=shift;
	open FH,"<$file";
}
sub _close{
	close FH;
}
sub _checkPattern{
	my($ref,$pat)=(@_);
	@tmp=@{$ref};
	print "@{$ref}" if($matched==1);
}	
sub getLinesAfterString{
	shift;
	my($file,$str,$line)=(@_);
	_open($file);
	my $cnt;
	while(<FH>){
		$flag=1 if(m/$str/);
		if($flag && $cnt<$line){
			print $_;
			$cnt++;
		}
		else{
			$cnt=0;
			$flag=0;
			next;			
		}
	}
	_close;
}
sub getLinesBetweenString{
	shift;
	my($file,$str1,$str2)=(@_);
	_open($file);
	while(<FH>){
		$flag=1 if(m/$str1/);
		print if ($flag==1);
		$flag=0 if(m/$str2/);
	}
	_close;
}
sub getLinesBetweenStringContainPattern{
	shift;
	my($file,$str1,$str2,$pat)=(@_);
	_open($file);
	while(<FH>){
		$flag=1 if(m/$str1/);
		push @arr,$_ if($flag==1);
		$matched=1 if(m/$pat/);
		if(m/$str2/){
			$flag=0;
			_checkPattern(\@arr,$matched);
			undef @arr;
			$matched=0;
		}
	}
	_close;
}
1

 

10 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

Perl: Printing Multiple Lines after pattern match

Hello People, Need some assistance/guidance. OUTLINE: Two files (File1 and File2) File1 has some ids such as 009463_3922_1827 897654_8764_5432 File2 has things along the lines of: Query= 009463_3922_1827 length=252 (252 letters) More stufff here ... (5 Replies)
Discussion started by: Deep9000
5 Replies

2. Shell Programming and Scripting

sed print all lines after pattern match

HiCan someone show me how to print all lines from a file after a line matching a pattern using sed?Thanks (13 Replies)
Discussion started by: steadyonabix
13 Replies

3. Shell Programming and Scripting

print chunk of lines only if there is a pattern match in between them

Hi All, Please find the sample file below: NAME ID NUMBER -------------------------------------------------------------------------------------------------- --------- abcdefgheija;lksdf ... (13 Replies)
Discussion started by: niel.verty
13 Replies

4. Shell Programming and Scripting

print lines with exact pattern match

I have in a file domain.com. 1909 IN A 1.22.33.44 domain.com. 1909 IN A 22.33.44.55 ns1.domain.com. 1699 IN A 33.44.55.66 ns2.domain.com. 1806 IN A 77.77.66.66 I need to "grep" or "awk" out the lines starting with domain.com. as follows. domain.com. 1909 IN A 1.22.33.44 domain.com.... (3 Replies)
Discussion started by: anilcliff
3 Replies

5. Shell Programming and Scripting

perl script print the lines between two pattern

i have a file as below sample.pl parameter1 argument1 argument2 parameter2 I want out as below argument1 argument2 that is , i want to print all the lines between parameter1 & parameter 2. i tried with the following if($mystring =~ m/parameter1(.*?)parameter2/) (2 Replies)
Discussion started by: roopa
2 Replies

6. Shell Programming and Scripting

Print lines before and after pattern match

I am using Solaris, I want to print 3 lines before pattern match pattern 5 lines after pattern match Pattern is abcd to be searched in a.txt. Looking for the solution in sed/awk/perl. Thanks .. Input File a.txt: ================= 1 2 3 abcd 4 5 6 7 8 (7 Replies)
Discussion started by: manuswami
7 Replies

7. Shell Programming and Scripting

Need one liner to search pattern and print everything expect 6 lines from where pattern match made

i need to search for a pattern from a big file and print everything expect the next 6 lines from where the pattern match was made. (8 Replies)
Discussion started by: chidori
8 Replies

8. Shell Programming and Scripting

Print lines that do not match the pattern

I need to print the lines that do not match a pattern. I tried using grep -v and sed -n '/pattern/!p', but both of them are not working as I am passing the pattern as variable and it can be null some times. Example ........ abcd...... .........abcd...... .........abcd......... (4 Replies)
Discussion started by: sunny1234
4 Replies

9. Shell Programming and Scripting

awk print pattern match line and following lines

Data: Pattern Data Data Data Data Data Data Data Data Data ... With awk, how do I print the pattern matching line, then the subsequent lines following the pattern matching line. Varying number of lines following the pattern matching line. (9 Replies)
Discussion started by: dmesserly
9 Replies

10. Shell Programming and Scripting

Match Pattern and print pattern and multiple lines into one line

Hello Experts , require help . See below output: File inputs ------------------------------------------ Server Host = mike id rl images allocated last updated density vimages expiration last read <------- STATUS ------->... (4 Replies)
Discussion started by: tigerhills
4 Replies
NEXT(3pm)						 Perl Programmers Reference Guide						 NEXT(3pm)

NAME
NEXT.pm - Provide a pseudo-class NEXT that allows method redispatch SYNOPSIS
use NEXT; package A; sub A::method { print "$_[0]: A method "; $_[0]->NEXT::method() } sub A::DESTROY { print "$_[0]: A dtor "; $_[0]->NEXT::DESTROY() } package B; use base qw( A ); sub B::AUTOLOAD { print "$_[0]: B AUTOLOAD "; $_[0]->NEXT::AUTOLOAD() } sub B::DESTROY { print "$_[0]: B dtor "; $_[0]->NEXT::DESTROY() } package C; sub C::method { print "$_[0]: C method "; $_[0]->NEXT::method() } sub C::AUTOLOAD { print "$_[0]: C AUTOLOAD "; $_[0]->NEXT::AUTOLOAD() } sub C::DESTROY { print "$_[0]: C dtor "; $_[0]->NEXT::DESTROY() } package D; use base qw( B C ); sub D::method { print "$_[0]: D method "; $_[0]->NEXT::method() } sub D::AUTOLOAD { print "$_[0]: D AUTOLOAD "; $_[0]->NEXT::AUTOLOAD() } sub D::DESTROY { print "$_[0]: D dtor "; $_[0]->NEXT::DESTROY() } package main; my $obj = bless {}, "D"; $obj->method(); # Calls D::method, A::method, C::method $obj->missing_method(); # Calls D::AUTOLOAD, B::AUTOLOAD, C::AUTOLOAD # Clean-up calls D::DESTROY, B::DESTROY, A::DESTROY, C::DESTROY DESCRIPTION
NEXT.pm adds a pseudoclass named "NEXT" to any program that uses it. If a method "m" calls "$self-"NEXT::m()>, the call to "m" is redis- patched as if the calling method had not originally been found. In other words, a call to "$self-"NEXT::m()> resumes the depth-first, left-to-right search of $self's class hierarchy that resulted in the original call to "m". Note that this is not the same thing as "$self-"SUPER::m()>, which begins a new dispatch that is restricted to searching the ancestors of the current class. "$self-"NEXT::m()> can backtrack past the current class -- to look for a suitable method in other ancestors of $self -- whereas "$self-"SUPER::m()> cannot. A typical use would be in the destructors of a class hierarchy, as illustrated in the synopsis above. Each class in the hierarchy has a DESTROY method that performs some class-specific action and then redispatches the call up the hierarchy. As a result, when an object of class D is destroyed, the destructors of all its parent classes are called (in depth-first, left-to-right order). Another typical use of redispatch would be in "AUTOLOAD"'ed methods. If such a method determined that it was not able to handle a particu- lar call, it might choose to redispatch that call, in the hope that some other "AUTOLOAD" (above it, or to its left) might do better. By default, if a redispatch attempt fails to find another method elsewhere in the objects class hierarchy, it quietly gives up and does nothing (but see "Enforcing redispatch"). This gracious acquiesence is also unlike the (generally annoying) behaviour of "SUPER", which throws an exception if it cannot redispatch. Note that it is a fatal error for any method (including "AUTOLOAD") to attempt to redispatch any method that does not have the same name. For example: sub D::oops { print "oops! "; $_[0]->NEXT::other_method() } Enforcing redispatch It is possible to make "NEXT" redispatch more demandingly (i.e. like "SUPER" does), so that the redispatch throws an exception if it cannot find a "next" method to call. To do this, simple invoke the redispatch as: $self->NEXT::ACTUAL::method(); rather than: $self->NEXT::method(); The "ACTUAL" tells "NEXT" that there must actually be a next method to call, or it should throw an exception. "NEXT::ACTUAL" is most commonly used in "AUTOLOAD" methods, as a means to decline an "AUTOLOAD" request, but preserve the normal exception- on-failure semantics: sub AUTOLOAD { if ($AUTOLOAD =~ /foo|bar/) { # handle here } else { # try elsewhere shift()->NEXT::ACTUAL::AUTOLOAD(@_); } } By using "NEXT::ACTUAL", if there is no other "AUTOLOAD" to handle the method call, an exception will be thrown (as usually happens in the absence of a suitable "AUTOLOAD"). Avoiding repetitions If "NEXT" redispatching is used in the methods of a "diamond" class hierarchy: # A B # / / # C D # / # E use NEXT; package A; sub foo { print "called A::foo "; shift->NEXT::foo() } package B; sub foo { print "called B::foo "; shift->NEXT::foo() } package C; @ISA = qw( A ); sub foo { print "called C::foo "; shift->NEXT::foo() } package D; @ISA = qw(A B); sub foo { print "called D::foo "; shift->NEXT::foo() } package E; @ISA = qw(C D); sub foo { print "called E::foo "; shift->NEXT::foo() } E->foo(); then derived classes may (re-)inherit base-class methods through two or more distinct paths (e.g. in the way "E" inherits "A::foo" twice -- through "C" and "D"). In such cases, a sequence of "NEXT" redispatches will invoke the multiply inherited method as many times as it is inherited. For example, the above code prints: called E::foo called C::foo called A::foo called D::foo called A::foo called B::foo (i.e. "A::foo" is called twice). In some cases this may be the desired effect within a diamond hierarchy, but in others (e.g. for destructors) it may be more appropriate to call each method only once during a sequence of redispatches. To cover such cases, you can redispatch methods via: $self->NEXT::UNSEEN::method(); rather than: $self->NEXT::method(); This causes the redispatcher to skip any classes in the hierarchy that it has already visited in an earlier redispatch. So, for example, if the previous example were rewritten: package A; sub foo { print "called A::foo "; shift->NEXT::UNSEEN::foo() } package B; sub foo { print "called B::foo "; shift->NEXT::UNSEEN::foo() } package C; @ISA = qw( A ); sub foo { print "called C::foo "; shift->NEXT::UNSEEN::foo() } package D; @ISA = qw(A B); sub foo { print "called D::foo "; shift->NEXT::UNSEEN::foo() } package E; @ISA = qw(C D); sub foo { print "called E::foo "; shift->NEXT::UNSEEN::foo() } E->foo(); then it would print: called E::foo called C::foo called A::foo called D::foo called B::foo and omit the second call to "A::foo". Note that you can also use: $self->NEXT::UNSEEN::ACTUAL::method(); or: $self->NEXT::ACTUAL::UNSEEN::method(); to get both unique invocation and exception-on-failure. AUTHOR
Damian Conway (damian@conway.org) BUGS AND IRRITATIONS
Because it's a module, not an integral part of the interpreter, NEXT.pm has to guess where the surrounding call was found in the method look-up sequence. In the presence of diamond inheritance patterns it occasionally guesses wrong. It's also too slow (despite caching). Comment, suggestions, and patches welcome. COPYRIGHT
Copyright (c) 2000-2001, Damian Conway. All Rights Reserved. This module is free software. It may be used, redistributed and/or modified under the same terms as Perl itself. perl v5.8.0 2002-06-01 NEXT(3pm)
All times are GMT -4. The time now is 01:04 PM.
Unix & Linux Forums Content Copyright 1993-2022. All Rights Reserved.
Privacy Policy