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

Linux终端-将大量十六进制字节从文本文件转换为ASCII,linux,hex,ascii,Linux,Hex,Ascii,我在一个文本文件的每行上有8字节的十六进制。是否可以将其转换为ASCII码?例如,215f6674应转换为_ft您没有在您的环境中指定任何约束,因此,我选择使用一个简单的perl命令行来解决这个问题 perl -pe 's/([a-fA-F0-9][[a-fA-F0-9])/chr(hex($1))/eg' < your_file_of_hex perl-pe的/([a-fA-F0-9][[a-fA-F0-9])/chr(hex($1))/eg'cat十六进制 414243 215f66

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

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

perl -pe 's/([a-fA-F0-9][[a-fA-F0-9])/chr(hex($1))/eg' < your_file_of_hex
perl-pe的/([a-fA-F0-9][[a-fA-F0-9])/chr(hex($1))/eg'
作为解释,正则表达式一次获取两个十六进制字符并应用两个函数。第一个“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
>>
>cat十六进制
414243
215f6674
616263
>>perl-pe's/([a-fA-F0-9][[a-fA-F0-9])/chr(hex($1))/eg'>

假设每行正好有八个十六进制,下面是一个纯的
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
此脚本的输出为:

!_ft
ABCD
abcd

请注意,这是一个快速和肮脏的命令行脚本。如果这是生产代码,我会检查每一行,以确定它只包含合法的十六进制对。另外一个将要考虑如何处理不可打印的值。
!_ft
ABCD
abcd