Beefy Boxes and Bandwidth Generously Provided by pair Networks
Welcome to the Monastery
 
PerlMonks  

Re^4: Search and delete lines based on string matching

by brut (Initiate)
on Mar 13, 2007 at 14:46 UTC ( [id://604553]=note: print w/replies, xml ) Need Help??


in reply to Re^3: Search and delete lines based on string matching
in thread Search and delete lines based on string matching

Its as in option 2..that is new line character after each string. I am facing a problem in the code you provided that it is not able to delete strings like bin[0] , bin 12 and bin234. Can you please help on this also.
  • Comment on Re^4: Search and delete lines based on string matching

Replies are listed 'Best First'.
Re^5: Search and delete lines based on string matching
by imp (Priest) on Mar 13, 2007 at 14:57 UTC
    Ah, you specified that words had to be removed, not tokens that could be part of a word. For the token 'bin' which should be removed:
    1. foobin
    2. binary
    3. bin1
    If all of those should be deleted then you can change that pattern from:
    my $pattern = '\b(?:' . join('|', @tokens) . ')\b';
    To:
    my $pattern = join('|', @tokens);
    If you only want to match words that start with 'bin', and are followed only by non-alpha characters, then this:
    my $pattern = '^(?:' . join('|', @tokens) . ')[^a-zA-Z]*$';
    A revised copy that handles the deletion of tokens with a purely line based input:
    #!/usr/local/bin/perl use strict; use warnings; if (@ARGV != 3) { print "Usage: $0 <pattern file> <input file> <output file>\n"; exit; } my ($pattern_filename, $source_filename, $dest_filename) = @ARGV; open my $pattern_fh, '<', $pattern_filename or die "Failed to open $pa +ttern_filename: $!"; my @tokens = (); while (my $line = <$pattern_fh>) { chomp $line; push @tokens, $line; } my $pattern = '^(?:' . join('|', @tokens) . ')[^a-zA-Z]*$'; print "Search pattern: $pattern\n"; open my $infile, "<", $source_filename or die "Failed to open $source +_filename: $!"; open my $outfile,">>", $dest_filename or die "Failed to open $dest_f +ilename: $!"; while(my $line = <$infile>) { print "input : $line"; if ($line =~ /$pattern/) { next; } print "output: $line"; print $outfile $line; } close($infile); close($outfile);
    A reply falls below the community's threshold of quality. You may see it by logging in.

Log In?
Username:
Password:

What's my password?
Create A New User
Domain Nodelet?
Node Status?
node history
Node Type: note [id://604553]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this?Last hourOther CB clients
Other Users?
Others meditating upon the Monastery: (7)
As of 2024-04-25 08:00 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    No recent polls found