我需要创建一个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次;
非常感谢您的帮助!
答案 0 :(得分:0)
首先,我想提供一种在搜索中包含大写的方法。例如,如果我想查找单词“apple”的所有实例,我不希望它忽略“Apple”或“APPLE”的任何用法。
将i
修饰符添加到正则表达式
我还想成为苹果在命令行中输入关键字而不是实际的脚本本身。
使用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 open和Tutorial on opening things in Perl on Perldoc
最后,如果我可以包含打印输出文件中出现的字符串数量,那就太好了。例如,如果单词“apple”在文本文件中出现5次,我希望看到文件位置的输出,还有“苹果在FILE.txt中出现5次”之类的内容
保持计数器变量而不是在第一次击中后返回。然后在文件行循环结束后打印文件名和计数器。
参考:对编程和循环的基本理解,与Perl完全无关。