Use tr
(aqui rot128):
LC_ALL=C tr 'LC_ALL=C tr 'set -- $(od -An -vtu1 < infile)
-7' '3210765432107654321076543210765432107654321076543210765432107654for i in $(od -An -vtu1 < infile); do
echo "$(($i ^ 123))"
done | awk '{printf "%c", $0}' > outfile
32107654321076543210765432107654321076543210765432107654321076543210765432107654321076543210765432107654321076543210765432107654'
-7' '0-7LC_ALL=C tr 'LC_ALL=C tr 'set -- $(od -An -vtu1 < infile)
-7' '3210765432107654321076543210765432107654321076543210765432107654for i in $(od -An -vtu1 < infile); do
echo "$(($i ^ 123))"
done | awk '{printf "%c", $0}' > outfile
32107654321076543210765432107654321076543210765432107654321076543210765432107654321076543210765432107654321076543210765432107654'
-7' '0-7%pre%-7' < infile > outfile
-7' < infile > outfile
Para o XOR 123, você precisaria calcular a linha tr
correspondente:
Mais geralmente, para responder à pergunta, converter um arquivo em uma matriz de números a ser usada pelo shell com comandos padrão:
%pre% Você pode aplicar as transformações desejadas e convertê-las novamente em um arquivo com awk
' printf("%c")
.
Isso vai ser muito ineficiente.
Como:
%pre% Você pode usar od -An -vtu2
, para obter números de 16 bits, mas observe que está no endianness local, portanto, ao converter de volta para os caracteres, você deve levar isso em conta.