Linux终端-将大量十六进制字节从文本文件转换为ASCII



我在文本文件的每一行都有8个十六进制字节。是否可以将其转换为ASCII?例如,215f6674应该转换为!_ft

假设每行正好有八个十六进制,这里是一个纯bash解决方案:

#!/bin/bash
while read a
do
# echo $a
printf "x${a:0:2}x${a:2:2}x${a:4:2}x${a:6:2}n"
done < infile

如果infile包含:

215f6674
41424344
61626364

该脚本的输出为:

!_ft
ABCD
abcd

您没有在环境中指定任何约束,所以我选择用一个简单的perl命令行来解决这个问题

perl -pe 's/([a-fA-F0-9][[a-fA-F0-9])/chr(hex($1))/eg' < your_file_of_hex

作为解释,正则表达式一次获取两个十六进制字符,并应用两个函数。第一个是"hex",将这两个十六进制宪章转换为int。第二个是"chr",将该int转换为等价的ascii。

例如

>> cat hex
414243
215f6674
616263
>> perl -pe 's/([a-fA-F0-9][[a-fA-F0-9])/chr(hex($1))/eg'<hex
ABC
!_ft
abc
>>

最新更新