Perl脚本自动化:search记事本中的某些项目

我必须使用CTRL+F来search某些项目,这些项目在记事本中每天几乎是100。我想知道,有没有什么办法可以写一个脚本或其他任何东西,我将通过所有的项目,它会给我的search输出,如果它成功,即它应该返回记事本中find的所有项目。

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

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

 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; 

你基本上想要grep

 grep -o pattern file.txt 

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

http://www.wingrep.com/

从功能页面:

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

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

这里是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; } } 

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

为了做一个grep,你需要在该工具上使用下面的替换语法“^(?:(?!TEXT)”)* \ r \ n“这是要搜索的模式,并且替换为框应该是空的。

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