以下命令在Linux中的命令行上有效:

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


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

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


我究竟做错了什么?

最佳答案

$"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;

关于linux - 为什么此egrep命令在我的Shell中有效,而在Perl中却无效?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/34456045/

10-10 04:01