2014-01-22 43 views
0

刪除我使用Perl來清理其中包含了一些奇怪的字符,如一個原始文本文件中的以下內容:模式匹配確切的詞,並在Perl

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

有文件中的= 0A許多occurances我必須擺脫它。他們occure在隨機集的像上面那裏是和2的示例3

我用我的Perl腳本以下行來消除存在的字符:

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

這一工程,但它也從所有電話號碼和其他包含0的內容中刪除零(0)。

任何人都可以建議模式匹配一​​個確切的子字符串,並刪除它?

+0

它也應該刪除'='和'A'的所有匹配項。請參閱「引用和引用類運營商」下的「perldoc perlop」。 – ThisSuitIsBlackNot

+1

您確定要刪除他們嗎?它看起來像一個特殊字符的編碼,因此整個數據都在一行上。如果'= 0A' ='\ n',你可以運行替代's/=([0-9A-Fa-f] {2})/ chr hex $ 1/eg'來解碼字符串。 – amon

回答

2

tr///是不是正則表達式:它會(與-d改性劑)代替單個字符零字符

在你的情況下,使用tr/=0A//將取代=0A一無所有每次發生。

s///但是,它是一個替換運算符,它將用指定的字符串替換正則表達式 - 在您的情況下爲零個字符。

因此,使用:

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

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

使用下面的,如果你只是想去掉=0A,而不是=0A

$string=~s/=0A//g; 
1

perlop

TR/SEARCHLIST/REPLACEMENTLIST/cds
y/SEARCHLIST/REPLACEMENTLIST/cds

將在搜索列表中找到的所有字符與替換列表中的相應字符一起轉錄。

而不是取代的=0A所有出現的,tr取代的=0A所有出現:

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

打印:

foobr 

相反,你應該使用s/pattern/replacement/ ,例如

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

打印:

foobAr0 

g改性劑進行全局替換,即,用於在每線發生。

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