Поздний ответ, но, надеюсь, может помочь кому-то еще, прочитав это:
У xxd была ошибка обработки пробелов в режиме "-r -p". Поскольку он сканировал символы, если он попадал в 2 последовательных не шестнадцатеричных символа, он отбрасывал бы все до следующего символа новой строки или конца файла. Если второй из 2 последовательных символов сам по себе является символом новой строки (то есть строка заканчивается пробелом, за которым следует символ новой строки), чистый эффект заключается в отбрасывании всей следующей строки.
Я почти уверен, что именно это и стало причиной проблемы Удита. (Я думаю, что hexdump, который он позже добавил в input.txt, на самом деле не отражал исходное состояние этого файла.)
Похоже, что xxd в основном поддерживается как часть дистрибутива vim. Я посмотрел на источник xxd, включенный в vim 7.3, и в нем исправлена проблема с обработкой ошибок. К сожалению, никто не удосуживается обновить версию #, поэтому он по-прежнему сообщает ту же строку версии xxd 1.10.
Попробуйте создать этот тестовый файл (с 1 пробелом в конце первой строки и без пробела во второй; это должен быть 22-байтовый файл в Linux / Unix; если вы запускаете «xxd -p» для него, он должен отчет 3230200a34652034662035340a34322034312034340a):
20
4e 4f 54
42 41 44
Если вы запустите "xxd -r -p" для этой версии с версией xxd, показывающей обработку ошибок, вы должны увидеть, что она печатает BAD. В более новой (фиксированной) версии xxd будет напечатано NOTBAD.
Если вы столкнетесь с этой обработкой ошибок, и обновление до более новой версии xxd не будет возможным, вы можете избежать этой проблемы с помощью некоторой предварительной обработки sed, например,
$ sed -e 's/ *//g' -e '/^$/d' input.txt | xxd -r -p > output.txt