![]() |
|
|
|
|
|||||||
| Forums | Portal | Register | Forum Rules | FAQ | Contribute | Members List | Arcade | Search | Today's Posts | Mark Forums Read |
| Shell Programming and Scripting Post questions about KSH, CSH, SH, BASH, PERL, PHP, SED, AWK and OTHER shell scripts here. |
|
|
||||
| Thread | Thread Starter | Forum | Replies | Last Post |
| SED Search Pattern and Replace with the Pattern | racbern | Shell Programming and Scripting | 4 | 03-15-2008 02:59 AM |
| Search for a pattern | DNAx86 | Shell Programming and Scripting | 26 | 03-12-2008 04:03 AM |
| Search for a pattern from the result of search | boopathi_d | Shell Programming and Scripting | 3 | 12-05-2007 06:54 AM |
| Search file for pattern and grab some lines before pattern | frustrated1 | Shell Programming and Scripting | 2 | 12-22-2005 12:41 PM |
| how to search the pattern | vasikaran | UNIX for Dummies Questions & Answers | 2 | 06-30-2005 01:34 AM |
|
|
Submit Tools | LinkBack | Thread Tools | Search this Thread | Display Modes |
|
#1
|
|||
|
|||
|
Search Pattern And Arrays
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);
------ 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. |
| Forum Sponsor | ||
|
|
|
#2
|
||||
|
||||
|
If it's just a matter of determining the number of arguements passed.
Try using 'shift' and iterate through them. Otherwise, 'foreach $var, @ARGV' should work too. |
||||
| Google The UNIX and Linux Forums |