【问题标题】:How to use bash's grep in perl? [closed]如何在 perl 中使用 bash 的 grep? [关闭]
【发布时间】:2021-10-13 07:59:09
【问题描述】:

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

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

(目标是查看“some_word”在目录及其所有内部文件夹/文件中出现了多少次。

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”不足以理解我是什么问?

【问题讨论】:

    标签: perl grep wc


    【解决方案1】:

    这是一个示例,说明如何递归地计算目录/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/

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-04-17
      • 1970-01-01
      • 2014-02-21
      • 1970-01-01
      • 1970-01-01
      • 2016-02-04
      相关资源
      最近更新 更多