Há uma ferramenta que especificamente suporta nativamente essa função:
dd
com a conversão de swab
( swa p b ytes):
% echo ABCD | dd conv=swab
BADC
0+1 records in
0+1 records out
5 bytes (5 B) copied, 0.000109277 s, 45.8 kB/s
Você deve adicionar 2> /dev/null
para descartar a saída do registro:
% echo ABCD | dd conv=swab 2> /dev/null
BADC
Aviso: Isso fará praticamente o que você deseja se você enviá-lo
um número par de caracteres (imprimíveis). Mas se você der
um número ímpar de caracteres imprimíveis - digamos 2 n +1 -
então dd
terá a nova linha no final
como o caractere (2 n +2) th ,
e troque-o com o (2 n +1) th . Então,
% echo ABCDE | dd conv=swab 2> /dev/null
envia
Um B
C D E \ n
para dd
, o que lhe dá
B A
D C \ n E
de volta; isso será parecido com
BADC
E
Você pode contornar isso especificando a opção -n
para echo
para suprimir a nova linha no final
(ou apenas use printf
sem adicionar uma nova linha).
Se você está exibindo a saída para a tela, então, por completo,
você deve adicionar uma nova linha no final:
% echo -n ABCDE | dd conv=swab 2> /dev/null; echo
BADCE
% printf "%s" ABCDE | dd conv=swab 2> /dev/null; printf "\n"
BADCE