为什么这个egrep命令在我的shell中工作但在Perl中不起作用?

时间:2015-12-24 17:22:51

标签: linux perl grep

以下命令适用于Linux中的命令行:

Cannot open source file "SDKDDKVer.h"

但是当我在Perl脚本中使用它时,它不会返回任何内容。这是Perl代码:

egrep -r -i -I -H -A5 "^name#maria.*?#[0-9]{4}#.*?#.*?#.*?$" .

我做错了什么?

1 个答案:

答案 0 :(得分:2)

$"是一个perl variable,正在反引号中扩展。你需要逃脱美元

my @rows = qx{egrep -r -i -I -H -A5 "^name#maria.*?#[0-9]{4}#.*?#.*?#.*?\$" .};

我使用qx{}代替不太明显的反引号。

另一种方法,使用open并将每个参数作为单独的参数传递:

use autodie qw/open close/;
my @command = ('egrep','-r','-i','-I','-H','-A5','^name#maria.*?#[0-9]{4}#.*?#.*?#.*?$','.');
open my $pipe, '-|', @command;
chomp( my @rows = <$pipe> );
close $pipe;