Perl脚本自动化:在记事本中搜索某些项目

时间:2012-06-26 05:52:49

标签: windows perl automation

我必须使用CTRL+F搜索某些项目,这些项目在记事本中每天几乎100个。我想知道,有什么方法可以编写脚本或其他任何内容,我可以将传递所有项目,如果成功,它将给我搜索输出即它 应该返回记事本中找到的所有物品。

我正在windows工作。请帮助,因为这会浪费我的时间,如果项目增加到1000,不久的将来,这对我来说将是一个巨大的解决方法。

我对Perl有一些想法,我认为在Perl中是可能的,所以我在这里提出了这个问题。但是如果你想用其他任何语言提供你的脚本,请给我。 找到了解决方案。

5 个答案:

答案 0 :(得分:3)

use strict;
use warnings;

my $qfn   = 'file.txt';
my @terms = ( 'foo', 'bar', ... );

my %terms_not_found = map { $_ => 1 } @terms;

open(my $fh, '<', $qfn)
   or die("Can't open \"$qfn\": $!\n");

while (<$fh>) {
   for my $term (keys(%terms_not_found)) {
      delete $terms_not_found{$term} if /\Q$term/;
   }

   last if !%terms_not_found;
}

print("Found:\n");
print("$_\n")
   for grep !$terms_not_found{$_}, @terms;

答案 1 :(得分:2)

你基本上想要grep

grep -o pattern file.txt

答案 2 :(得分:2)

请注意,我不希望这变成一个建议主题,但有时最简单的解决方案就是你不必自己编写。

http://www.wingrep.com/

从功能页面:

  • 命令行界面:强大的类UNIX命令行界面允许Windows Grep从DOS框或其他Windows shell驱动。

您可以在批处理脚本中使用wingrep的命令行选项来执行搜索,并在Windows中将其设置为每日/每周/任何计划任务以执行自动化。

答案 3 :(得分:1)

以下是perl脚本的用法。

use strict;
use warnings;

open(FILE,'<file.txt');
my @items=qw(abc 123 abc123 xyz);
my @match;

while(<FILE>)
{
 my @words=split(/ /,$_);
 foreach my $el(@items) {
    @match=grep {$el eq $_} @words;
    local $\=" ";    # Output separator
    print @match;
    }
}

答案 4 :(得分:0)

您可以尝试http://www.codeproject.com/Articles/4600/Notepad-RE-Regular-Expressions 这是一个非常好的工具。您可以使用来自“boost :: regex”的perl兼容正则表达式。

为了执行grep,您需要在该工具上使用以下替换语法“^(?:(?!TEXT)。)* \ r \ n” 这是要搜索的模式,用box替换应为空。

该正则表达式将删除任何没有TEXT的行。