在perl grep中模仿linux grep -w

mon*_*ool 0 linux perl

perl中的grep为我提供了所有匹配的行与正则表达式.

对于前

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

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

Dav*_*oss 5

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

my @family_map = ("A2LVLX","LVLX","O2LVLX");
my $search = 'LVLX';
my @match = grep (/\b$search\b/, @family_map);
print "@match";
Run Code Online (Sandbox Code Playgroud)

更新:或者,如果您知道阵列的元素都是单个单词,那么只需使用eq.

my @match = grep( $_ eq $search, @family_map);
Run Code Online (Sandbox Code Playgroud)