У меня есть текстовый файл, содержащий нежелательные нулевые символы (ASCII NUL, \0
). Когда я пытаюсь просмотреть его в vi
Ясно ^@
символы, чередованные в обычном тексте. Как может я:
Определите, какие строки в файле содержат нулевые символы? Я попытался держать для \0
и \x0
, но это не работало.
Удалить нулевые символы? Выполнение strings
на файле, очищенном это, но я просто задаюсь вопросом, является ли это лучшим способом?
Я бы использовал tr
:
tr < file-with-nulls -d '\000' > file-without-nulls
Если вам интересно, работает ли перенаправление ввода в середине командных аргументов, то да. Большинство оболочек распознают и работают с перенаправлением ввода/вывода (<
, >
, ...) в любом месте командной строки.
Используйте следующую команду sed для удаления нулевых символов в файле.
sed -i 's/\x0//g' null.txt
это решение редактирует файл на месте, что важно, если файл все еще используется. передача -i'ext' создает резервную копию оригинального файла с добавленным суффиксом 'ext'.
Большое количество нежелательных символов NUL, скажем, по одному на каждый второй байт, указывает на то, что файл закодирован в UTF-16 и что вам следует использовать iconv
для преобразования его в UTF-8.
Я обнаружил следующее, которое выводит, какие строки, если таковые имеются, имеют нулевые символы:
perl -ne '/\000/ and print;' file-with-nulls
Кроме того, восьмеричный дамп может сказать вам, есть ли нули:
od file-with-nulls | grep ' 000'