Shell:将文本文件中的任何数字从十进制转换为十六进制



在与此稍微不同的问题中,我想将文本文件中的任何数字从十进制转换为十六进制

一个数在这里由a set of numeric characters together定义。

的例子:

$ cat MyFile.txt
Hello,10,Good255Bye-boys01

必须成为:

Hello,0A,GoodFFBye-boys01
有效:

Hello,A,GoodFFBye-boys1

允许(第一个大小写)指定字符宽度(以获得0A而不是A)的方法是首选的。

我已经测试了grep以提取管道连接到bc的数字以转换它们:

( echo "obase=16" ; cat Line.txt  |grep -o '[0-9]*') | bc

,但此方法每行只显示一个(转换为十六进制)数字,并删除其余字符。

既然您可以在管道中使用grepbc,很明显您不想要纯sh的解决方案,但很乐意使用外部工具。

perl -pe 's/([0-9]+)/sprintf "%02X", $1/ge' myfile.txt

一个Python解决方案(感谢用户4ae1e1的建议):

$ cat convert.py
#!/usr/bin/env python3
import fileinput
import re
for line in fileinput.input():
    print(re.sub("d+", lambda matchobj: "%X" % int(matchobj.group(0)), line), end="")

使用例子:

cat MyFile.txt | ./convert.py

或:

./convert.py MyFile.txt

dec2hex命令将执行此任务。

相关内容

  • 没有找到相关文章

最新更新