Перевод из 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 шт):
Для того чтобы перевести каждую строку из 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
Этот код будет работать так же, как и предыдущий, но теперь он не будет обрабатывать строки, не содержащие целых чисел.