如何从字符串集中搜索
我想要一个perl脚本来搜索"aaa", "bbb", "ccc", "ddd"
从txt文件中搜索
示例1
some random text
blah
blah
blah
//Car/trunk/sandbox/users/Tom/xyz/bbb/toyota
期望的输出:
//Car/trunk/sandbox/users/Tom/xyz/...
示例2
some random text
blah
blah
blah
//Car/trunk/sandbox/users/Alex/abc/defg/ddd/honda/accord
期望的输出:
//Car/trunk/sandbox/users/Alex/abc/defg/...
基本上从"aaa", "bbb", "ccc", "ddd"
的给定字符串集中进行搜索,它会在示例1中找到"bbb"
并取出之前的所有字符串,然后使用"..."
请注意,它是从一个文本文件中读取,示例1是文本文件的示例,例如2也是如此。
到目前为止,这就是我所拥有的。
my $infile = 'new5.txt';
my @strings = qw/aaa bbb ccc ddd/;
local @ARGV = ($infile);
while( <> ){
print;
}
答案 0 :(得分:3)
到目前为止,你所拥有的代码是我称之为hackish方式来捕获文件的代码。 首先,我们将取消强制性的实用程序:
use strict;
use warnings;
use autodie;
最后一个确保脚本在找不到文件或无法打开时死亡。 你正确地初始化了$ infile和@strings,很好。
打开和循环文件内容的正确或更可接受的方式是:
open(my $FILE, "<", $infile);
while(my $line = <$FILE>) {
chomp $line;
...
}
close($FILE);
在此循环中,您希望尝试匹配@strings
数组的每个元素。这可以通过循环遍历数组中的每个元素来实现:
foreach my $elem (@strings) {
...
}
在此循环中,您想要进行匹配。如果是,请打印出您需要的内容(并转到文件中的下一行)。查看perlre
手册页,了解=~
之后的内容:
if ($line =~ m#/$elem/#) {
print SOMETHING;
next;
}
那是什么东西?根据{{1}}手册页,`$``(以及其他助记符)是包含匹配字符串之前的字符串的变量:
perlvar
把它们放在一起然后你就有了脚本。