Perl正则表达式替换

时间:2013-10-24 19:36:18

标签: regex perl

我正在尝试获取文件,并将其复制到输出文件,然后查找所有<k>并将其转换为<p>。我想使用正则表达式。

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

          else
          {
              print OUTPUTFILE "<k>";  
            }

  }

我正在尝试这样的事情,但我猜$ _变量一次占用每一行。 因此,最好使用写入整个文件然后尝试正则表达式搜索并替换?因为我尝试过:

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

4 个答案:

答案 0 :(得分:5)

一次一行不是问题。

while (<>)
   s/<k>/<p>/g;
   print;
}

答案 1 :(得分:1)

正如@ikegami所说,一次一行是没问题的。或者,您可以在一次搜索中执行此操作并替换:

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

这将在单个操作中进行搜索和替换,对于较大的文件可能更快和/或更高效。

答案 2 :(得分:0)

如果你真的想一次处理整个文件:

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

来自:

perl -0777 -MO=Deparse -pe 's/<k>/<p>/g; print;'

答案 3 :(得分:0)

从命令行

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

简单......: - )

如果您担心换行效果,请查找“更改记录分隔符”