Идентификация и удаление нулевых символов в UNIX

У меня есть текстовый файл, содержащий нежелательные нулевые символы (ASCII NUL, \0). Когда я пытаюсь просмотреть его в vi Ясно ^@ символы, чередованные в обычном тексте. Как может я:

  1. Определите, какие строки в файле содержат нулевые символы? Я попытался держать для \0 и \x0, но это не работало.

  2. Удалить нулевые символы? Выполнение strings на файле, очищенном это, но я просто задаюсь вопросом, является ли это лучшим способом?

84
задан Tom Howard 27 January 2014 в 03:16
поделиться

4 ответа

Я бы использовал tr:

tr < file-with-nulls -d '\000' > file-without-nulls

Если вам интересно, работает ли перенаправление ввода в середине командных аргументов, то да. Большинство оболочек распознают и работают с перенаправлением ввода/вывода (<, >, ...) в любом месте командной строки.

113
ответ дан 24 November 2019 в 08:29
поделиться

Используйте следующую команду sed для удаления нулевых символов в файле.

sed -i 's/\x0//g' null.txt

это решение редактирует файл на месте, что важно, если файл все еще используется. передача -i'ext' создает резервную копию оригинального файла с добавленным суффиксом 'ext'.

59
ответ дан 24 November 2019 в 08:29
поделиться

Большое количество нежелательных символов NUL, скажем, по одному на каждый второй байт, указывает на то, что файл закодирован в UTF-16 и что вам следует использовать iconv для преобразования его в UTF-8.

18
ответ дан 24 November 2019 в 08:29
поделиться

Я обнаружил следующее, которое выводит, какие строки, если таковые имеются, имеют нулевые символы:

perl -ne '/\000/ and print;' file-with-nulls

Кроме того, восьмеричный дамп может сказать вам, есть ли нули:

od file-with-nulls | grep ' 000'
6
ответ дан 24 November 2019 в 08:29
поделиться
Другие вопросы по тегам:

Похожие вопросы: