2013-10-16 18 views
1

我有一个文件,其中包含由编码字符混合的文本组成的长行。Perl,用相应的字符替换hexa文本

%255D%252C%2522actualPage%2522%253A1%252C%2522rowPerPage%2522%253A50%257D%255D 

每个编码字符其中xx是ASCII字符的十六进制值(例如:%2540 = @

我尝试了如下因素,但W/O型成功

perl -pe 's/%25([0-9A-F](0-9A-F])/\x$1/' myfile.txt 
perl -pe 's/%25([0-9A-F](0-9A-F])/chr($1)/' myfile.txt 

你有对我有什么线索?

TIA,Peyre

回答

0
perl -pe 's/%25([0-9A-F][0-9A-F])/chr hex $1/ge' myfile.txt 

输出

],"actualPage":1,"rowPerPage":50}] 
3

也许你想要的是URI::Encode。使用模块比使用正则表达式更好。

perl -MURI::Encode -nle'$u=URI::Encode->new(); print $u->decode($u->decode($_));' 

输出这是你的输入字符串:

],"actualPage":1,"rowPerPage":50}] 

正如你会发现,该字符串必须解码两次,因为它已被编码两次(%25显然是百分号% )。临时产量

%5D%2C%22actualPage%22%3A1%2C%22rowPerPage%22%3A50%7D%5D 
2
perl -MURI::Escape -ne'print uri_unescape(uri_unescape($_))' 
+0

+1很好的,更简单。 – TLP