1

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

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

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

4

5 回答 5

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;
于 2012-06-26T06:20:52.870 回答
2

你基本上想要grep.

grep -o pattern file.txt
于 2012-06-26T06:08:18.810 回答
2

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

http://www.wingrep.com/

从功能页面:

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

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

于 2012-06-26T06:10:25.673 回答
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;
    }
}
于 2012-06-26T06:33:31.160 回答
0

You can try http://www.codeproject.com/Articles/4600/Notepad-RE-Regular-Expressions It is a very nice tool. You can use perl compatible regular expressions from "boost::regex".

In order to do a grep, you need to use following replace syntax on that tool "^(?:(?!TEXT).)*\r\n" That is the pattern to be searched, and replace with box should be empty.

That regexp will remove any lines without the TEXT in it.

于 2012-06-26T13:08:06.467 回答