我正在使用Perl来清理原始文本文件,其中包含一些奇怪的字符,如下所示:
printableNNH=0A=0A =0A=0A=0A Event Registration Request=0A=0A ...
在我必须摆脱的文件中有很多 = 0A 的出现。它们以上面的随机集合出现,其中有一个例子为2和3。
我在Perl脚本中使用以下行来消除字符:
tr/=0A//d; #remove =0A
虽然有效,但它也会从所有电话号码和其他包含0的内容中删除零(0)。
任何人都可以建议模式匹配一个确切的子串并删除吗?
答案 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
而不是=
,0
或A
$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
修饰符全局执行替换,即对于行中的每个匹配项。