04-24-2009
Perl searching and printing multiple target in the same line
Hello,
I'm trying to create a program in perl called myfind.pl;
To use the program:
(at the command line)$ program.pl keyword filename
note: the keyword is any word or regular expression
and it should display the result just like when you 'cat' the file name but with the keyword in different color.
the problem is the program works fine if it's only one match in a line but it wouldn't get the 2nd match on the same line. I tried many logic and it didn't work out.
This is what i want it to look like
example: $ myfind.pl hot weather.txt
result: Yesterday was very hot and i had a cup of hot tea with a hot soup
my code right now looks like this and it works fine for getting a match per line but the rest of the match wouldn't be in color as the first match.
use strict;
unshift(@INC, "Xcolors.pm");
use Xcolors qw(:group_fg :group_bg :group_misc);
my $obj = "Xcolors"->new();
my $xrex = shift;
my $xfile = shift;
open(FH,"$xfile")||die("cannot open '$xfile': $!\n");
while(my $line=<FH>)
{
if($line =~ $xrex)
{
$_ = $line;
/$xrex/;
print "$`";
$obj->fred();
print "$&";
$obj->reset();
print "$'";
}
else
{
$obj->reset();
print "$line";
}
}
close(FH)||die("cannot close '$xfile': $!\n");
Any suggestion is really appreciated,
Thank you.
Last edited by Horizon666; 04-24-2009 at 05:58 PM..
10 More Discussions You Might Find Interesting
1. Shell Programming and Scripting
I know this must be really easy, but i can't get it to work
I've got a perl script, with a file.
I want to print an empty line, and the following doesn't seem to work:
print nameoffile "\n"
thanks for your help!! (3 Replies)
Discussion started by: kfad
3 Replies
2. Shell Programming and Scripting
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
3. Shell Programming and Scripting
I am trying to find a way to utilise the full potential of my cpu cores and memory on my windows machine.
Now, I am quite familiar with grep, however, running a Unix based OS is not an option right now.
Unfortunately, the 32 bit grep for windows that I am running, I cannot run multiple... (1 Reply)
Discussion started by: Moloch
1 Replies
4. Shell Programming and Scripting
Hi,
I have code like:
Output it is comming as:
Rels: WM2
Rels: WG2
Rels: 5
- pre/prods.pl
Rels: 6
Rels: 7
Rels: 8
Rels: 10
Rels: Int
But i want only "Rels: 5" pattern Just above "- pre/prods.pl".
By... (7 Replies)
Discussion started by: Anjan1
7 Replies
5. UNIX for Dummies Questions & Answers
Hi again
I have figured out how to be able to sort through lines in a file with multiple words in any order and display them using this command:
cat file | grep -i $OPTION1 | grep -i $OPTION2 | grep -i $OPTION3 OPTION1 is 2008, OPTION2 is Mar, OPTION 3 is Tue
Result:
Tue Mar 25... (4 Replies)
Discussion started by: semaj
4 Replies
6. Shell Programming and Scripting
I am interested in searching links to files not found within a directory, so I use the -follow option. However, the dir may contain links to files that are also found within the dir. That means if I bin/find a bunch of files then search their contents using grep, I get redundant information. An... (1 Reply)
Discussion started by: stevensw
1 Replies
7. Shell Programming and Scripting
I got multiple of documents in which i have to extract a line coming after a ID..The scenario is
Customer ID: none
VT : 002/89
Customer ID: Yes
VT: 001/89
Customer ID: none
VT: 006/85
Customer ID: Yes
VT: 003/56
I have to extract the id which is coming after YES..The output... (7 Replies)
Discussion started by: rajkrishna89
7 Replies
8. UNIX for Dummies Questions & Answers
I'm attempting to use grep in Perl with very little success.
What I would like to do in Perl is get the output of the following grep code:
grep -l 'pattern' *
This gives me a list of all the files in a directory that contain the pattern that was searched.
My attempts to do this in Perl... (4 Replies)
Discussion started by: WongSifu
4 Replies
9. Shell Programming and Scripting
Hi All,
i have an output of command vmstat as below :
$ vmstat
System configuration: lcpu=4 mem=5376MB ent=1.00
kthr memory page faults cpu
----- ----------- ------------------------ ------------ -----------------------
r b avm fre re pi... (10 Replies)
Discussion started by: omkar.jadhav
10 Replies
10. Shell Programming and Scripting
This is an extract from a large file. The lines that start with fc are ports on a fabric switch. In between each fc port there is information about the port.
fc2/12 is up
Port description is SEIEDISCOVER-3
Speed is 4 Gbps
fc2/13 is down (Administratively down)
fc2/14 is up
Port... (1 Reply)
Discussion started by: kieranfoley
1 Replies
LEARN ABOUT SUSE
tap::parser::source::perl
TAP::Parser::Source::Perl(3pm) Perl Programmers Reference Guide TAP::Parser::Source::Perl(3pm)
NAME
TAP::Parser::Source::Perl - Stream Perl output
VERSION
Version 3.17
SYNOPSIS
use TAP::Parser::Source::Perl;
my $perl = TAP::Parser::Source::Perl->new;
my $stream = $perl->source( [ $filename, @args ] )->get_stream;
DESCRIPTION
Takes a filename and hopefully returns a stream from it. The filename should be the name of a Perl program.
Note that this is a subclass of TAP::Parser::Source. See that module for more methods.
METHODS
Class Methods
"new"
my $perl = TAP::Parser::Source::Perl->new;
Returns a new "TAP::Parser::Source::Perl" object.
Instance Methods
"source"
Getter/setter the name of the test program and any arguments it requires.
my ($filename, @args) = @{ $perl->source };
$perl->source( [ $filename, @args ] );
"croak"s if $filename could not be found.
"switches"
my $switches = $perl->switches;
my @switches = $perl->switches;
$perl->switches( @switches );
Getter/setter for the additional switches to pass to the perl executable. One common switch would be to set an include directory:
$perl->switches( ['-Ilib'] );
"get_stream"
my $stream = $source->get_stream($parser);
Returns a stream of the output generated by executing "source". Must be passed an object that implements a "make_iterator" method.
Typically this is a TAP::Parser instance.
"shebang"
Get the shebang line for a script file.
my $shebang = TAP::Parser::Source::Perl->shebang( $some_script );
May be called as a class method
"get_taint"
Decode any taint switches from a Perl shebang line.
# $taint will be 't'
my $taint = TAP::Parser::Source::Perl->get_taint( '#!/usr/bin/perl -t' );
# $untaint will be undefined
my $untaint = TAP::Parser::Source::Perl->get_taint( '#!/usr/bin/perl' );
SUBCLASSING
Please see "SUBCLASSING" in TAP::Parser for a subclassing overview.
Example
package MyPerlSource;
use strict;
use vars '@ISA';
use Carp qw( croak );
use TAP::Parser::Source::Perl;
@ISA = qw( TAP::Parser::Source::Perl );
sub source {
my ($self, $args) = @_;
if ($args) {
$self->{file} = $args->[0];
return $self->SUPER::source($args);
}
return $self->SUPER::source;
}
# use the version of perl from the shebang line in the test file
sub _get_perl {
my $self = shift;
if (my $shebang = $self->shebang( $self->{file} )) {
$shebang =~ /^#!(.*perl.*?)(?:(?:s)|(?:$))/;
return $1 if $1;
}
return $self->SUPER::_get_perl(@_);
}
SEE ALSO
TAP::Object, TAP::Parser, TAP::Parser::Source,
perl v5.12.1 2010-04-26 TAP::Parser::Source::Perl(3pm)