Três soluções possíveis (assumindo que cada linha é um conjunto de dígitos somente ):
Para shells como ksh, bash, zsh:
printf '%08x\n' $(<infile)
Apenas para bash
<file.txt mapfile -t arr; printf '%08x\n' "${arr[@]}"
Para shells mais simples: dash (o padrão sh em sistemas baseados em Debian), ash (shell emulado em busybox), yash e alguns shells padrão no AIX e Solaris:
printf '%08x\n' $(cat infile)
Na verdade, para um shell como a versão de herança (como o Bourne) ele precisa ser escrito como (o que funciona em todos os shells do posix listados acima, mas eu recomendo strongmente que não o use ) :
$ printf '%08x\n' 'cat infile'
Resposta para EDITAR # 1
Entenda que um valor hexadecimal de 80000000
causará estouro em um computador de 32 bits (não é comum nos dias de hoje, mas é possível). Verifique se echo "$((0x80000000))"
não imprime um valor negativo.
$ for i in $(<infile); do printf '%08x\n' "$(($i+0x80000000))"; done
80020000
80030000
80040000
80050000
80060000