2015-10-25 8 views
-2

В немного другом вопросе от this other, я хотел бы преобразовать любое число в текстовом файле с десятичным в шестнадцатеричный.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 

, но этот метод показывает только один (преобразованного в шестнадцатеричном) номер каждой строки, и удаляет остальные символы.

+1

Опубликовать ваши попытки. –

+0

Bash не является правильным выбором. Вам нужно что-то с лучшими возможностями регулярного выражения. Например, это тривиально в Python с 're.sub'. – 4ae1e1

+2

На самом деле, глядя на этот предыдущий вопрос, я удивляюсь, почему вы не приняли ни одного из ответов, поскольку они, похоже, делают именно то, что вы просили. До сих пор вы только принимали ответы на 6 из 37 вопросов. – usr2564301

ответ

1

Поскольку вы используете grep и bc в трубе, ясно, что вы не хотите решения в чистом sh, но с удовольствием используем внешние инструменты.

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

Действительно, решение Perl отлично действует, поскольку оно является обычным инструментом для оболочек Linux. Кажется, твоя работа прекрасна. Спасибо вам. –

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 
0

д Команда ec2hex выполнит задачу.