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。の最後に改行があり、$_次の 2 つのシェル コマンドを実行しています。

grep -r $_
Satheesh > out.txt

にはファイル名の引数がないためgrep、標準入力、つまり端末から読み取っています。ハングしたときに入力すると、コマンド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

}
于 2013-12-27T05:33:20.300 に答える