如何在 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/
我想 运行 在 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/