Code: #!/usr/bin/perl #use strict; use warnings; sub search_pattern { my $file_name = $_[0]; my $search = $_[1]; open(LOGFILE, $_[0]) or die("Error: cannot open file '$_[0]'\n"); while (<LOGFILE>) { if ( $_ =~ /$search/ ) { my $val = $`; #Matches Everything after pattern $val =~ s/^\s+//; #remove leading spaces $val =~ s/\s+$//; #remove trailing spaces $val =~ s/\D//g; #Just has the digits. All other charcters are filtered. #print "$val\n"; print "\nFirst Occurence:$val \n"; my $line = $.; print "Line number:$line\n"; #$temp = $line; #print "$temp"; #print "$."; last; } } } my $file_n ="test.txt"; my $search_p = "This is phrase 2"; &search_pattern($file_n, $search_p); OUTPUT ------ First Occurence:90 Line number:3 Hi guys, My code above searches for the first occurence of a phrase and returns the line number... What if i wanna search for multiple search phrases in a single file and return the line numbers. For example: test.txt 1.This is phrase 1 2.This is phrase 3 3.This is phrase 2 4.This is phrase 3 any text in between 5.This is phrase 5 any text in between 6.This is phrase 4 7.This is phrase 1 8.This is phrase 2 9.This is phrase 3 10.This is phrase 6 11.This is phrase 7 12.This is phrase 1 13.This is phrase 2 14.This is phrase 3 15.This is phrase 4 16.This is phrase 8 17.This is phrase 1 ................. ................. i have given the line numbers for my reference in reality, it is not present... The arguments passed are file_name and Search phrases (for eg: this is phrase1, this is phrase 2, This Phrase 3, phrase 5...) The number of arguments passed may vary... But the first argument is always the file_name. first it will check for phrase 1 and then from that line number phrase 2 (even though in our case Phrase 3 come in between phrase 2 ie., line 2 we need phrase 2 first and then phrase 3) and then phrase 3 and return phrase 3. lets say we have 4 arguments including file name... if (phrase 1 exists) ---------- if (phrase 1 doesnt exists) from that line number ----------- search for phrase 2 search for phrase 2 ---------- if (phrase 2 also doesnt exists) from that line number ---------- search for phrase 2 and return phrase 3 ---------if (phrase 3 also doesnt exists) ----------- return phrase 2 ----------- else phrase 1 search for phrase 3 ----------- if none of them exists display a message return the phrase 3 the reason iam keeping track of line number is so that the file is not parsed from line 1. if i know the number of arguments passed then its fine... But the thing is what if i dont know the number of arguments presents. can anybody suggest how do i proceed for this problem.
This was quite confusing, what's your ultimate motive? to search for a string a file and get what line it is in, right?