【发布时间】:2014-07-05 12:52:07
【问题描述】:
我需要创建一个 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
}
}
}
}
现在我想补充几点: 首先,我想包括一种在搜索中包含大写的方法。例如,如果我想查找单词“apple”的所有实例,我不希望它忽略“Apple”或“APPLE”的任何用法。
我也想成为苹果在命令行中输入关键字而不是实际脚本本身。
另外,是否可以让脚本在名为“output.txt”的指定目录中创建一个文件并将脚本的输出导入其中?我知道一个命令行,你必须有类似 > output.txt 的东西,但我不完全确定如何在脚本中实现它。
最后,如果我能打印出该字符串在文件中出现的次数,那就太好了。例如,如果单词“apple”在文本文件中出现 5 次,我想查看文件位置的输出,以及类似“apple 在 FILE.txt 中出现 5 次”的输出
非常感谢您的帮助!
【问题讨论】:
-
我发现“到目前为止我已经完成了这项任务”这句话加上 perl 101 问题以及脚本中使用的内置函数和关键字既可疑又有趣
-
一方面,你会因为试图找到一个你想要的脚本而受到赞扬。另一方面,诚实地承认你找到了别人的脚本,但根本不了解它是如何工作的,因此即使是最基本的功能也无法理解如何添加,这样会产生更多的好感和更少的负面反应。跨度>
-
我很抱歉,我并不是要暗示我自己编写了整个脚本,我从几个完成相同事情的脚本中借用了属性。我的问题是基于更多关于修改脚本和添加更多功能的问题。我是一个完整的新手,想学习 perl,我了解非常基础的知识,但通过示例学习。对脚本部分的任何功能的任何解释都将不胜感激。非常感谢,如果我走错了对不起!