我必须使用CTRL+F
搜索某些项目,这些项目在记事本中每天几乎100个。我想知道,有什么方法可以编写脚本或其他任何内容,我可以将传递所有项目,如果成功,它将给我搜索输出即它
应该返回记事本中找到的所有物品。
我正在windows
工作。请帮助,因为这会浪费我的时间,如果项目增加到1000,不久的将来,这对我来说将是一个巨大的解决方法。
我对Perl有一些想法,我认为在Perl中是可能的,所以我在这里提出了这个问题。但是如果你想用其他任何语言提供你的脚本,请给我。 找到了解决方案。
答案 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)
请注意,我不希望这变成一个建议主题,但有时最简单的解决方案就是你不必自己编写。
从功能页面:
您可以在批处理脚本中使用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的行。