搜索多个字符串

时间:2014-05-06 17:30:23

标签: string perl search replace

如何从字符串集中搜索

我想要一个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;
    }

1 个答案:

答案 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

把它们放在一起然后你就有了脚本。