我正在尝试获取文件,并将其复制到输出文件,然后查找所有<k>
并将其转换为<p>
。我想使用正则表达式。
while (<INPUTFILE>)
{
if($_ != "<p>")
{
print OUTPUTFILE "$_\n";
}
else
{
print OUTPUTFILE "<k>";
}
}
我正在尝试这样的事情,但我猜$ _变量一次占用每一行。 因此,最好使用写入整个文件然后尝试正则表达式搜索并替换?因为我尝试过:
$_ =~ s/<k>/<p>/g;
答案 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
简单......: - )
如果您担心换行效果,请查找“更改记录分隔符”