在目录中搜索具有特定字符串和打印位置的文件

时间:2014-05-16 23:26:42

标签: string perl file search

我需要创建一个perl脚本,它将搜索给定目录并查找包含特定字符串的所有txt文件。我希望perl脚本然后打印这些文件的位置。到目前为止,我已完成该任务,但我想在脚本中添加更多功能。

这是我到目前为止所做的:

#!/usr/bin/perl
use strict;
use warnings;
use File::Find;

my $dir ='C:\path\to\dir';
my $keyword = "apple";


find(\&txtsearch, $dir);

sub txtsearch {

   if(-f $_ && $_ =~ /\.txt$/) { 
       open my $file, "<", $_ or do {
           warn qq(Unable to open "$File::Find::name": $!); #checks permissions
           return;
       };

       while(<$file>) {
           if (/\Q$keyword\E/) {  
               print "$File::Find::name\n"; #prints location of file
               return; #stops searching once found             
           }
      }
   } 
}

现在我想添加一些东西: 首先,我想包括一种在搜索中包含大写的方法。例如,如果我想找到单词&#34; apple&#34;的所有实例。我不希望它忽视&#34; Apple&#34;或&#34; APPLE&#34;。

我还想成为Apple在命令行中输入关键字而不是实际脚本本身。

此外,是否可以让脚本在名为&#34; output.txt&#34;的指定目录中创建一个文件。并将脚本的输出导入到该?我知道一个命令行你必须有类似&gt; output.txt但我不完全确定如何在脚本中实现它。

最后,如果我可以包含打印输出文件中出现的字符串数量,那就太好了。例如,如果单词&#34; apple&#34;在文本文件中出现5次,我希望看到文件位置的输出,也就像&#34; apple在FILE.txt&#34中出现5次;

非常感谢您的帮助!

1 个答案:

答案 0 :(得分:0)

  

首先,我想提供一种在搜索中包含大写的方法。例如,如果我想查找单词“apple”的所有实例,我不希望它忽略“Apple”或“APPLE”的任何用法。

i修饰符添加到正则表达式

参考perldoc perlre

  

我还想成为苹果在命令行中输入关键字而不是实际的脚本本身。

使用GetOpt::Long模块进行命令行参数处理。

参考GetOpt::Long

  

此外,是否可以让脚本在名为“output.txt”的指定目录中创建一个文件,并将脚本的输出导入到该文件中?我知道一个命令行你必须有类似&gt; output.txt但我不完全确定如何在脚本中实现它。

使用open(my $output_filehandle, ">", "output.txt") or die "Can not open file for writing: output.txt. $!"

打开要写入的文件

然后将print <STUFF>替换为print $output_filehandle <STUFF>

参考perldoc openTutorial on opening things in Perl on Perldoc

  

最后,如果我可以包含打印输出文件中出现的字符串数量,那就太好了。例如,如果单词“apple”在文本文件中出现5次,我希望看到文件位置的输出,还有“苹果在FILE.txt中出现5次”之类的内容

保持计数器变量而不是在第一次击中后返回。然后在文件行循环结束后打印文件名和计数器。

参考:对编程和循环的基本理解,与Perl完全无关。