如何在 perl 中使用 bash 的 grep?

How to use bash's grep in perl?

我想 运行 在 perl 中使用以下 unix 命令:

grep -r "some_word" /path/to/directory | wc -l

(目标是查看“some_word”在一个目录中出现了多少次及其所有inside-folders/files。

Perl 的等效项是什么? 我试着寻找 here,但没有足够的例子来满足我的需要。

例如,这是我的:

/tmp/a/text1:
"This is a big text"

/tmp/a/text2:
"This is another text"

/tmp/b/text3:
"One more big text"

/tmp/a/a2/text4:
"Last big text"

我希望能够 运行 grep 命令,我将得到:

grep_command_in_perl -r "big" /tmp/ | wc -l
3

谢谢! :)

*** 编辑:*** (我不明白为什么问题被关闭了......对我有什么样的期望?“grep -r”some_word”/path/to/directory | wc -l”是否不足以理解什么我在问?

这里是一个示例,说明如何递归地计算目录 /path/to/directory 及其子目录中所有文件中与单词 some_word 匹配的行数。这相当于 grep -r some_word /path/to/directory | wc -l:

use feature qw(say);
use strict;
use warnings;
use File::Find;

{
    my $dir = '/path/to/directory';
    my $count = 0;
    my $word = 'some_word';
    find(sub { wanted($_, $count, $word) }, $dir);
    say $count;
}

sub wanted {
    my ( $fn, $count, $word ) = @_;
    return if !-f $_;
    open ( my $fh, '<', $fn ) or die "Could not open file '$fn': $!";
    while( my $line = <$fh> ) {
        $$count++ if $line =~ /$word/;
    }
    close $fh;
}

如果您想按字面解释 $word(转义正则表达式元字符,如 *)、...等),请使用 /\Q$word\E/ 而不是/$word/