我试图在perl中使用grep,但我必须从perl中重新使用它们与grep选项一起使用它,我这样做
#!/usr/bin/perl
system(grep -c $ARGV[0] $ARGV[1]);
这会引发错误,如何实现?
答案 0 :(得分:7)
system('grep', '-c', $ARGV[0], $ARGV[1]);
但请考虑这是否是您想要做的。 Perl可以在不调用外部程序的情况下自行完成很多事情。
答案 1 :(得分:0)
system()
的参数必须是字符串(或字符串列表)。尝试:
#!/usr/bin/perl
system("grep -c $ARGV[0] $ARGV[1]");
答案 2 :(得分:0)
您可能无法获得对该代码的期望。来自perldoc -f system
:
The return value is the exit status of the program as returned by
the "wait" call.
system
实际上不会从grep
向您提供计数,只是grep进程的返回值。
为了能够使用perl中的值,请使用qx()
或反引号。 E.g。
my $count = `grep -c ... `;
# or
my $count2 = qx(grep -c ...);
请注意,这会在号码后面显示换行符,例如“6 \ n” 个。
但是,为什么不使用所有perl?
my $search = shift;
my $count;
/$search/ and $count++ while (<>);
say "Count is $count";
但是,钻石操作员open
执行的隐式<>
在错误的手中可能是危险的。您可以使用三参数打开手动打开文件:
use autodie;
my ($search, $file) = @ARGV;
my $count;
open my $fh, '<', $file;
/$search/ and $count++ while (<$fh>);
say "Count is $count";