通过Perl执行grep
我是Perl新手。我正在尝试用perl执行grep命令 我必须从文件中读取输入,并根据输入执行grep 我的代码如下:通过Perl执行grep,perl,file-io,grep,line-by-line,Perl,File Io,Grep,Line By Line,我是Perl新手。我正在尝试用perl执行grep命令 我必须从文件中读取输入,并根据输入执行grep 我的代码如下: #!/usr/bin/perl use warnings; use strict; #Reading input files line by line open FILE, "input.txt" or die $!; my $lineno = 1; while (<FILE>) { print " $_"; #This is w
#!/usr/bin/perl
use warnings;
use strict;
#Reading input files line by line
open FILE, "input.txt" or die $!;
my $lineno = 1;
while (<FILE>) {
print " $_";
#This is what expected.
#our $result=`grep -r Unable Satheesh > out.txt`;
our $result=`grep -r $_ Satheesh > out.txt`;
print $result
}
print "************************************************************\n";
#/usr/bin/perl
使用警告;
严格使用;
#逐行读取输入文件
打开文件“input.txt”或die$!;
我的$lineno=1;
而(){
打印“$”;
#这是我们所期望的。
#我们的$result=`grep-r Unable-Satheesh>out.txt`;
我们的$result=`grep-r$\usatheesh>out.txt`;
打印$result
}
打印“*****************************************************************************************************\n”;
但是,如果我运行脚本,它看起来像一个无限循环,脚本一直在等待,out.txt文件中没有打印任何内容。它挂起的原因是您在读取
文件后忘记使用chomp
。因此,在$\uu
的末尾有一个新行,它正在执行两个shell命令:
grep -r $_
Satheesh > out.txt
由于grep
没有文件名参数,因此它是从标准输入(即终端)读取的。如果在Ctl-d挂起时键入Ctl-d,则会收到一条错误消息,告诉您没有Satheesh
命令
另外,由于您正在将grep
的输出重定向到out.txt
,因此,$result
中不会放入任何内容。如果要在变量中捕获输出并将其放入文件中,可以使用tee
命令
以下是修复方法:
while (<FILE>) {
print " $_";
chomp;
#This is what expected.
#our $result=`grep -r Unable Satheesh > out.txt`;
our $result=`grep -r $_ Satheesh | tee out.txt`;
print $result
}
while(){
打印“$”;
咀嚼;
#这是我们所期望的。
#我们的$result=`grep-r Unable-Satheesh>out.txt`;
我们的$result=`grep-r$uuheesh|teeout.txt`;
打印$result
}
所有的grep
输出都将进入out.txt
,而不是进入$result
。当Perl有一个非常好的内置grep
函数时,为什么要使用grep
命令?你是否希望Satheesh是模式,$\uu.是要搜索的目录?如果是这样的话,我想你已经把它们倒过来了。