regex - 使用 perl/awk 或其他匹配字符替换 ascii

标签 regex linux perl awk

<分区>

我有一个使用 nginx 和 lua 代码编写的访问日志。 它是url编码的,一些字符写成\xHexCode格式(比如双引号写成\x22)。 我想运行 awk 或 perl 或其他快速脚本来替换它。

最佳答案

您可以像这样使用 gnu-awk:

str='\x22 \x41 written as \x22).'

awk -v RS='\\\\x[0-9]+' 'RT{ORS=sprintf("%c", strtonum("0" substr(RT, 2)))} 1' <<< "$str"
" A written as ").

它是这样工作的:

  1. 使用 RS='\\\\x[0-9]+',我们为每个 \xNN 数字分隔自定义记录分隔符。
  2. substr(RT, 2)\x41
  3. 获取 x41
  4. strtonum("0"substr(RT, 2)) 添加 0 使其成为 0x41 并返回 ascii 码 65
  5. printf "%c"65 打印等效的 ascii 字符 A
  6. ORS=... 将输出记录分隔符设置为与 sprintf 的返回值相同。

关于regex - 使用 perl/awk 或其他匹配字符替换 ascii,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30674277/

相关文章:

linux - sh 不支持进程替换 <(...) 吗?

xml - 在 perl 的子程序中声明全局变量

linux - FastCGI with perl - 在共享 Linux 虚拟主机上

regex - 有没有更好的方法来模拟\x插值?

regex - 将正则表达式拆分为 2 个捕获组

c# - 如何使用这种格式验证美国货币 $123.45

python - 通过 linux 发送格式化的 html 邮件

linux - 有没有办法在 posix shell 或 bash 中扇出流?

python - 文本处理 - Python 与 Perl 的性能对比

php - 正则表达式mysql问题