在与this other稍有不同的问题中,我想将文本文件中的任何数字从十进制转换为十六进制。
此处的数字由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
但是此方法每行只显示一个(转换为十六进制)数字,并删除其余字符。
答案 0 :(得分:1)
由于您可以在管道中使用grep
和bc
,因此很清楚您不想要纯粹的sh
解决方案,但很乐意使用外部工具。
perl -pe 's/([0-9]+)/sprintf "%02X", $1/ge' myfile.txt
答案 1 :(得分:0)
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
答案 2 :(得分:0)
dec2hex命令将完成任务。