1

ファイルを取得して出力ファイルにコピーし、すべてを見つけ<k><p>代わりに作成しようとしています。正規表現を使いたい。

  while (<INPUTFILE>)
  {
         if($_ != "<p>")
         {
                print OUTPUTFILE "$_\n";  
          }

          else
          {
              print OUTPUTFILE "<k>";  
            }

  }

私はこのようなことを試みていましたが、 $_ 変数は一度に各行を取ると思います。したがって、ファイル全体を書き込んでから、正規表現の検索と置換を試したほうがよいでしょうか? そのために私は試しました:

  $_ =~ s/<k>/<p>/g;
4

4 に答える 4

5

一度に一行ずつでも問題ありません。

while (<>)
   s/<k>/<p>/g;
   print;
}
于 2013-10-24T19:41:20.037 に答える
1

@ikegami が示唆するように、一度に 1 行ずつ問題ありません。または、1 回の検索と置換でこれを行うこともできます。

{
   local $/ = undef;
   my $data = <INPUTFILE>;
   $data =~ s/<k>/<p>/g;
}

これにより、検索と置換が 1 回の操作で実行され、大きなファイルの場合はより高速かつ/またはより効率的になる可能性があります。

于 2013-10-24T19:44:41.303 に答える
0

ファイル全体を一度に処理したい場合:

BEGIN { $/ = undef; $\ = undef; }
LINE: while (defined($_ = <ARGV>)) {
    s/<k>/<p>/g;
    print $_;
}

から :

perl -0777 -MO=Deparse -pe 's/<k>/<p>/g; print;'
于 2013-10-24T19:41:55.620 に答える
0

コマンドラインから

perl -pe 's/<k>/<p>/g' <infile >outfile

シンプル.... :-)

改行効果が気になる場合は、「レコードセパレーターの変更」を調べてください

于 2013-10-24T19:46:42.370 に答える