Перевод из 10чной системы в 16ричную

Нужен однострочный perl-код для перевода каждой строки в текстовом файле из DEC-системы в HEX.
В файле строка 123243421231245, необходимо что бы в выходном файле получилось 7016D857E88D, и так далее с каждой строкой.
Использовал однострочный perl-код для перевода из BIN в HEX:

  `perl -ne "\$_ =~ s/([01]{8})/sprintf('%02x', oct('0b'.\$1))/egm; print \$_;" < test.txt > result.txt`  

Работало отлично все, нужно сделать что бы команда переводила теперь каждую строку из DEC-системы в HEX.


Ответы (1 шт):

Автор решения: SergeyPopov

Для того чтобы перевести каждую строку из DEC-системы в HEX с помощью однострочного perl-кода, вы можете использовать следующую команду:

perl -ne "\$_ =~ s/(\d+)/sprintf('%X', \$1)/eg; print \$_;" < test.txt > result.txt

Эта команда будет читать файл test.txt построчно, переводить каждое число в DEC-системе в HEX с помощью функции sprintf, а затем записывать результат в файл result.txt.

В этой команде регулярное выражение (\d+) ищет все целые числа в строке, а функция sprintf переводит их в HEX-формат с помощью шаблона %X. Флаг e в регулярном выражении позволяет выполнять выражение, указанное после s, как код Perl, а флаг g говорит о том, что нужно заменить все совпадения в строке, а не только первое.

Например, для файла test.txt со строками 123243421231245 и 123 в файле result.txt будут записаны строки 7016D857E88D и 7B, соответственно.

Обратите внимание, что если в исходном файле есть строки, которые не содержат целых чисел, то они будут оставлены без изменений. Чтобы избежать этого, можно добавить условие, чтобы обрабатывать только строки, содержащие целые числа. Например:

perl -ne "if (\$_ =~ /\d+/) {\$_ =~ s/(\d+)/sprintf('%X', \$1)/eg; print \$_;}" < test.txt > result.txt

Этот код будет работать так же, как и предыдущий, но теперь он не будет обрабатывать строки, не содержащие целых чисел.

→ Ссылка