1

我是 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";

但是,如果我运行脚本,它看起来像一个无限循环,并且脚本一直在等待,并且 out.txt 文件中没有打印任何内容。

4

1 回答 1

2

chomp它挂起的原因是因为您在阅读后忘记使用FILE. 所以 末尾有一个换行符$_,它正在执行两个 shell 命令:

grep -r $_
Satheesh > out.txt

由于没有文件名参数grep,它是从标准输入读取的,即终端。如果您Ctl-d在挂起时键入,则会收到一条错误消息,告诉您没有Satheesh命令。

此外,由于您正在重定向grepto的输出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

}
于 2013-12-27T05:33:20.300 回答