正则表达式匹配时删除特殊字符

时间:2012-09-25 02:05:47

标签: regex perl replace

我有一个像test.l

这样的文件
car ( "kia"
max speed
min speed
price "XXX"
)
bike ( "R1"
max speed
min speed
price "YYY"
)

我想删除“价格”行中的引号。 我一直在尝试使用:

use strict;

open FILE, "<<test.l";
#open (FILE2,">>test.l");

while (my $string = <FILE>) {

    if ($string =~ m/^price/ig) {

        $string =~ s/\"//ig;
        print  FILE $string;
    }
}
close FILE;
#close FILE2;

当遇到“价格”时,我可以用修改后的行覆盖输入文件吗? 上面的代码只是打印输入而没有任何改变。

2 个答案:

答案 0 :(得分:3)

不,这不太可能。您必须创建一个临时文件。以下技巧将为您创建临时文件:

local @ARGV = 'test.1';
local $^I = '';          # Use .bak on Windows
while (<>) {
   s/"//g if /^price/;
   print;
}

它与做

基本相同
perl -i -pe's/"//g if /^price/' test.1

答案 1 :(得分:0)

perl -ne 'if(/^price/){s/\"//g;}print' your_file