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

String 在目录中搜索具有特定字符串和打印位置的文件,string,perl,file,search,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); s

我需要创建一个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             
           }
      }
   } 
}
#/usr/bin/perl
严格使用;
使用警告;
使用File::Find;
我的$dir='C:\path\to\dir';
我的$keyword=“苹果”;
查找(\&txtsearch,$dir);
子txtsearch{
如果(-f$\&&$\=~/\.txt$/){
打开我的$file,“
首先,我想在搜索中加入大写的方法。例如,如果我想找到“apple”这个词的所有实例,我不希望它忽略“apple”或“apple”的任何用法

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

参考:

我还希望苹果在命令行中输入关键字,而不是实际的脚本本身

使用模块进行命令行参数处理

参考:

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

使用
Open(my$output\u filehandle,“>”,“output.txt”)或die“无法打开文件进行写入:output.txt.$!”

然后将
print
替换为
print$output\u filehandle

参考:及

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

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


参考资料:对编程和循环的基本理解,与Perl完全没有关系。

我发现“到目前为止,我已经完成了这项任务”"一方面,加上perl 101问题和脚本中使用的内置词和关键字都是可疑的和有趣的,你应该为试图找到一个满足你需要的脚本而受到赞扬。另一方面,诚实地承认你找到了其他人的脚本,但根本不了解它是如何工作的,因此无法理解它w即使添加最基本的功能也会产生更多的善意和更少的负面反应。我很抱歉,我不是故意暗示我自己写了整个脚本,我借用了几个脚本的属性来完成同样的事情。我的问题是基于更多关于修改和添加更多功能的内容。我我是一个完全的新手,希望学习perl,我了解基本知识,但通过示例学习。如果您对脚本的任何功能进行解释,我将不胜感激。非常感谢,如果我说错了,我将表示歉意!