Perl - 将整数转换为文本 Char(1,2,3,4,5,6)

1 perl character-encoding

我正在寻求帮助,试图将以下日志转换为纯文本。

这是一个 URL,所以可能有 %20 = 'space' 和其他,但我尝试转换的主要位是char(1,2,3,4,5,6)文本。

下面是我尝试转换的示例。

选择%20char(45,120,49,45,81,45),char(45,120,50,45,81,45),char(45,120,51,45,81,45)

到目前为止,我在尝试添加到char(in here)转换时尝试了以下内容chr($2)

perl -pe "s/(char())/chr($2)/ge" 
Run Code Online (Sandbox Code Playgroud)

所有这一切都设法删除字符,但现在我正在尝试将数字转换为文本并删除逗号和括号。

由于我对 perl 还很陌生,因此我可能对我的工作方式有所了解。

perl -pe "s/要删除的单词/将其更改为/ge 的单词"

"s/(char(这里有什么))/chr($2)/ge"

输出尝试实现的是

选择 -x1-Q-,-x2-Q-,-x3-Q-

或者

选择%20-x1-Q-,-x2-Q-,-x3-Q-

谢谢你的帮助

zdi*_*dim 5

对于一个合理的单线来说,这里有太多事情要做。此外,脚本以后更容易调整

use warnings;
use strict;
use feature 'say';

use URI::Escape 'uri_unescape';

my $string = q{select%20} 
    . q{char(45,120,49,45,81,45),char(45,120,50,45,81,45),} 
    . q{char(45,120,51,45,81,45)}; 

my $new_string = uri_unescape($string);  # convert %20 and such

my @parts = $new_string =~ /(.*?)(char.*)/;

$parts[1] = join ',', map { chr( (/([0-9]+)/)[0] ) } split /,/, $parts[1];

$new_string = join '', @parts;
say $new_string;
Run Code Online (Sandbox Code Playgroud)

这打印

选择 -x1-Q-,-x2-Q-,-x3-Q-

注释

  • 模块URI::Escape用于根据 RFC 3986 转换百分比编码的字符

  • 不确定是否有任何东西可以跟在带有char(...)s的部分之后,以及它可能是什么。如果上次char(...)调整拆分后可以有更多@parts,或澄清

  • 在带有char(...)s的部分中,只需要数字,map 中的正则表达式使用的是什么

如果你打算使用正则表达式,你应该仔细阅读它。看