在与此稍微不同的问题中,我想将文本文件中的任何数字从十进制转换为十六进制。
一个数在这里由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
,但此方法每行只显示一个(转换为十六进制)数字,并删除其余字符。
既然您可以在管道中使用grep
和bc
,很明显您不想要纯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命令将执行此任务。