mimic linux grep -w in perl grep



perl 中的 Grep 给了我所有匹配的行和正则表达式。

例如

{
    my @FAMILY_MAP= ("A2LVLX","LVLX","O2LVLX");
    my $search="LVLX";
    my @match = grep (/ALVL/, @FAMILY_MAP);
    print @match;
 }

在这里,我的预期输出是 LVLX,但我得到了数组中的所有三个元素。这也是Linux终端中的预期行为(如果grep LVLX是在包含三个单词的文件中完成的)。但是我必须在终端中使用 grep -w "LVLX" 才能获得 LVLX 作为输出。我需要一种方法来使用 perl grep 复制相同的内容。有什么提示吗?

grep -w仅在字符串显示为整个单词时才匹配字符串。为此,您需要在正则表达式中使用单词边界(b)转义序列。

my @family_map = ("A2LVLX","LVLX","O2LVLX");
my $search = 'LVLX';
my @match = grep (/b$searchb/, @family_map);
print "@match";

更新:或者,如果您知道数组的元素都是单个单词,则只需使用 eq .

my @match = grep( $_ eq $search, @family_map);

如果你想要一个完全匹配,你需要告诉它。您的模式/LVLX/匹配包含该模式的字符串,因为您尚未定位它。

有两种方法可以做到这一点。要么你像这样锚定你的模式

my @match = grep(/^ALVL$/, @FAMILY_MAP);

或者你使用 grep 的块形式并进行相等性检查,这在旧的 Perls 中更快(非常新的 Perls 对此进行了优化,但我不记得是在哪个版本中引入的)

my @match = grep { $_ eq 'ALVL' } @FAMILY_MAP;

两者都将为您提供相同的输出。

最新更新