testado no cygwin, deve funcionar no linux.
usa xxd e sed
em uma linha
$ xxd -p a.a | sed 's/^/6162636465/' | xxd -r -p > a2.a
quebrado
display a.a
$ cat a.a
abc
look at the hex of a.a
user@comp ~
$ xxd -p a.a
6162630a
O arquivo realmente contém uma nova linha no final, como xxd mostra acima.
veja quantas linhas xxd -p imprime..será sempre uma independentemente do arquivo que é fornecido, uma vez que todos os caracteres dentro do arquivo são transformados em hexadecimais, e ele imprime um \ n real no final do que despejado. (o que você veria se fizesse xxd -p a.a | xxd -p)
$ xxd -p a.a | wc -l
1
sed opera em cada linha, e ao inserir xxd -p, o sed sempre será introduzido em apenas uma linha, de forma muito simples.
user@comp ~
$ xxd -p a.a | sed 's/^/6162636465/'
61626364656162630a
user@comp ~
$ xxd -p a.a | sed 's/^/6162636465/' | xxd -r -p > a2.a
user@comp ~
$ xxd -p a2.a
61626364656162630a
user@comp ~
$ cat a2.a
abcdeabc
user@comp ~
$