Все файлы / dev / tty *
являются специальными символьными файлами.
Вы можете использовать find
:
find /dev -type c -name 'tty*'
Или в zsh
:
print -l /dev/tty*(%c)
Это можно сделать с помощью printf
и bash
:
printf '%08x\n' $(< test.txt)
Или с помощью printf и bc...просто...потому что?
printf '%08s\n' $(bc <<<"obase=16; $(< test.txt)")
Чтобы напечатать вывод в текстовый файл, просто используйте перенаправление оболочки >
, например:
printf '%08x\n' $(< test.txt) > output.txt
Три возможных решения (в предположении, что каждая строка представляет собой набор только цифр):
Для таких оболочек, как ksh, bash, zsh:
printf '%08x\n' $(<infile)
Только для bash
<file.txt mapfile -t arr; printf '%08x\n' "${arr[@]}"
Для более простых оболочек :тире (sh по умолчанию в системах на базе Debian ), ash (эмулированная оболочка busybox ), yash и некоторые оболочки по умолчанию в AIX и Solaris:
printf '%08x\n' $(cat infile)
На самом деле, для такой оболочки, как реликвия версии (Bourne, например ), она должна быть написана как (, которая работает на всех оболочках posix, перечисленных выше, но я настоятельно рекомендую не использовать это):
$ printf '%08x\n' `cat infile`
Имейте в виду, что шестнадцатеричное значение 80000000
вызовет переполнение на 32-битном компьютере (, что не является обычным явлением в наши дни, но возможно ).Убедитесь, что echo "$((0x80000000))"
не печатает отрицательное значение.
$ for i in $(<infile); do printf '%08x\n' "$(($i+0x80000000))"; done
80020000
80030000
80040000
80050000
80060000
Использованиеawk
:
$ awk '/[0-9]/ { printf("%08x\n", $0) }' file
00020000
00030000
00040000
00050000
00060000
Еще один -вкладыш. Все еще не python, но который допускает комментарии, пустые строки и все, что есть в файле, и выводит результат только для строк, содержащих только число.
perl -ne '/^(\d+)$/ && printf "%08x\n", $1' $your_file
Учитывая такой файл:
$ cat $your_file
# some numbers,
131072
196608
262144
327680
393216
and empty lines
and whatever...
Он печатает
00020000
00030000
00040000
00050000
00060000
Вот несколько однострочных решений на PHP:
<?php
foreach (file('test.txt') as $s) echo dechex(+$s), "\n";
<?php
array_map(fn($s) => print dechex(+$s). "\n", file('test.txt'));
$ julia -e 'function hexadd(x) hex(( x + 0x80000000),8) end ; output = open("output.txt","w") ; open("test.txt") do inputfile for num in eachline(inputfile) write(output,"$(hexadd(parse(Int,num)))\n") end end'
Должно быть легче читать многострочные:
function hexadd(x)
hex(( x + 0x80000000),8)
end
output = open("output.txt","w")
open("test.txt") do inputfile
for num in eachline(inputfile)
write(output,"$(hexadd(parse(Int,num)))\n")
end
end
hex( value, pad)
преобразует значение в шестнадцатеричный формат и при необходимости добавляет отступы. hexadd
требует ввода целого числа, поэтому мы преобразуем строки (выводаeachline
)в Int
с помощью parse(Int,"string")
и используем это в нашей функции. julia -e
оценивает выражение.$ dc -f test.txt -e '16o16i[80000000+psaz1<r]dsrx80000000+p' > output.txt
dc -f test.txt -e '16o 16i [80000000 + p sa z 1 <r] sr z 1 <r 80000000 + p' > output.txt
-f file
поместить содержимое файла в стек -e
выполнить выражение 16o
преобразовать выходные данные в число 16 по основанию 16i
предполагается ввод в базе 16. Это происходит после чтения файла, поэтому файл был прочитан в базе 10. Более явно я мог бы сделатьdc -e '10i' -f file -e '16 i 8000000'
[...]
поместить строку в стек. Эта строка будет использоваться как макрос. 80000000 +
добавить текущую вершину стека и шестнадцатеричное число 80000000. Поместить результат на вершину стека. p
Печать текущей вершины стека без извлечения. Только опция печати, которая печатает новую строку. sa
Извлечение и сохранение вершины стека в регистре 'a'. Он никогда не используется, просто способ избавиться от верхней части мешка. z
Текущая вершина стека теперь имеет глубину стека. Требуется для завершения рекурсивного вызова. 1
поместить 1 на вершину стека. Полезно по сравнению с глубиной стека (z ), помещенной ранее. <r
сравнить 2 значения из стека, если второе меньше первого, выполнить регистр 'r'. По сути, сравните глубину стека и «1». sr
извлечь и сохранить в регистре 'r'. Теперь макрос находится в регистре 'r' и будет выполняться до тех пор, пока глубина стека больше 1. За исключением того, что его еще никто не вызывал. d
Дублировать вершину стека и отправить. x
Выполнить вершину стека как макрос. d sr x
Дублировать макрос и отправить, теперь стек имеет 2 копии, извлечь и сохранить верхнюю копию для регистрации, извлечь и выполнить 2-ю копию...