Anonymous Monk has asked for the wisdom of the Perl Monks concerning the following question:

Hi perlmonks, I need a script where if we pass the line to be searched as an argument,it should list all the files in the directory where this script is ran from.Can anyone please help? Input:-findline "no data received within timeout" output:- should print all the files(*.*) containing this line Thanks

  • Comment on findline in all the files in a given directory

Replies are listed 'Best First'.
Re: findline in all the files in a given directory
by toolic (Bishop) on May 08, 2012 at 19:57 UTC
Re: findline in all the files in a given directory
by Athanasius (Archbishop) on May 09, 2012 at 02:35 UTC

    The following script does what is asked (and no more), using only Perl (with one core module) and looking in the current directory only (no recursion):

    use strict; use warnings; use Cwd; @ARGV == 1 or die "USAGE: $0 <search_line>\n"; printf "Searching directory '%s' for the line '%s':\n\n", Cwd::getcwd(), $ARGV[0]; my $found = 0; opendir my $dh, '.' or die "Unable to open the current directory: $!"; while (my $file = readdir($dh)) { if (-f $file) { open my $fh, '<', $file or die "Unable to open file '$file' for reading: $!"; while (my $line = <$fh>) { chomp $line; if ($line eq $ARGV[0]) { print "Found match in file '$file'\n"; $found = 1; last; } } close $fh or die "Unable to close file '$file': $!"; } } closedir $dh or die "Unable to close the current directory: $!"; print "No matches found\n" unless $found;

    HTH,

    Athanasius <°(((><contra mundum

Re: findline in all the files in a given directory
by Perlbotics (Archbishop) on May 08, 2012 at 19:57 UTC

    A Perl script? You could give ack a try. Run it with the -l switch to show filenames only.

Re: findline in all the files in a given directory
by Anonymous Monk on May 08, 2012 at 19:59 UTC