^@
, который вы видите, не является литеральной строкой. Это escape-код для NUL (символьное значение 0). Если вы хотите удалить их все:
tr -d '\0' <test.txt >newfile.txt
Для диагностики подобных вещей удобна утилита od
(восьмеричный дамп). Я запустил это в тестовом файле, который вы связали, чтобы подтвердить, что они были NUL:
$ od -c test.txt | head
0000000 \0 A \0 i \0 r \0 Q \0 u \0 a \0 l \0 i
0000020 \0 t \0 y \0 S \0 t \0 a \0 t \0 i \0 o
0000040 \0 n \0 E \0 o \0 I \0 C \0 o \0 d \0 e
0000060 \0 \n \0 D \0 E \0 H \0 E \0 0 \0 4 \0 4
*
0000400 \0 \n \0 D \0 E \0 H \0 E \0 0 \0 4 \0
0000420 4 \0 \n \0 D \0 E \0 H \0 E \0 0 \0 4 \0
*
0422160 4 \0 \n \n
0422164