通过Perl执行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

我是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 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.是要搜索的目录?如果是这样的话,我想你已经把它们倒过来了。