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

时间:2015-10-25 23:53:37

标签: shell base inline-editing

在与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

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

3 个答案:

答案 0 :(得分:1)

由于您可以在管道中使用grepbc,因此很清楚您不想要纯粹的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命令将完成任务。