grep 命令在 perl 中不显示任何输出

grep command not showing any output in perl

我有一个数组@files,其中有多个.txt 文件。我试图从这些文件中的行的开头 grep 所有具有模式“/home/[a-z]+”的行。我正在尝试以下方法:

my @lines = grep (/^\/home\/[a-z]+/, @files);
chomp(@lines);
my @line = uniq(@lines);

但是当我尝试打印@lines 时我没有在输出中得到任何东西。

谁能告诉我我在 grep 命令中做错了什么。谢谢

请参阅以下代码示例,它演示了您选择的方法。

如果您提供内容 @files 数组的示例,将会非常有帮助。

注意:不需要使用 uniq(@lines),因为文件系统在其组织中采用唯一文件名

use strict;
use warnings;
use feature 'say';

my @files = <DATA>;
my @lines = grep( m!^/home/[a-z]+/!, @files);

say @lines;

__DATA__
/home/alex/work/samples
/home/philip/doc/asterix
/home/maria/bin/quick_search.c
/bin/grep
/sbin/test

输出

/home/alex/work/samples
/home/philip/doc/asterix
/home/maria/bin/quick_search.c

用于过滤存储在数组中的文件列表的匹配模式的示例代码 @files

use strict;
use warnings;
use feature 'say';

my @files = qw/abc.txt, bcd.txt, cde.txt/;
my @lines;

for my $file (@files) {
    my @temp;
    
    open my $fh, '<', $file
        or die "Couldn't open $file";
    @temp = grep( m!^/home/[a-z]+/!, <$fh>);    
    close $fh;
    
    @lines = (@lines, @temp);
}

chomp(@lines);

say for @lines;