模式匹配Perl中的确切单词和删除

时间:2014-01-22 16:28:14

标签: regex perl

我正在使用Perl来清理原始文本文件,其中包含一些奇怪的字符,如下所示:

printableNNH=0A=0A    =0A=0A=0A    Event Registration Request=0A=0A ...

在我必须摆脱的文件中有很多 = 0A 的出现。它们以上面的随机集合出现,其中有一个例子为2和3。

我在Perl脚本中使用以下行来消除字符:

tr/=0A//d; #remove =0A

虽然有效,但它也会从所有电话号码和其他包含0的内容中删除零(0)。

任何人都可以建议模式匹配一​​个确切的子串并删除吗?

4 个答案:

答案 0 :(得分:2)

tr///不是正则表达式:它将(使用-d修饰符)将单个字符替换为零字符

在您的情况下,使用tr/=0A//将无效地替换= 0 A的每一次出现。

然而,

s///是一个替换运算符,它将用正则表达式替换正则表达式 - 在您的情况下为零字符。

因此,使用:

open my $input, '<', 'in.txt' or die "$!";

while (<$input>){
    chomp;
    s/=0A//g;
    print "$_\n";
}

答案 1 :(得分:2)

perl -pe 's/=0A//g' inFile > outFile

答案 2 :(得分:1)

如果您只想删除=0A而不是=0A

,请使用以下内容
$string=~s/=0A//g;

答案 3 :(得分:1)

来自perlop

  

TR / SEARCHLIST / REPLACEMENTLIST / CDS
  Y / SEARCHLIST / REPLACEMENTLIST / CDS

     

使用替换列表中的相应字符音译搜索列表中找到的所有字符。

=0A取代所有tr次出现,取代所有出现的=0 A

perl -we '$_ = "foo=0AbAr0"; tr/=0A//d; print'

打印:

foobr

相反,您应该使用s/pattern/replacement/,例如

perl -we '$_ = "foo=0AbAr0"; s/=0A//g; print'

打印:

foobAr0

g修饰符全局执行替换,即对于行中的每个匹配项。