У меня большой текстовый файл utf-8, с которым я часто ищу grep
. Недавно grep
начал сообщать, что это был бинарный файл. Я могу продолжить поиск с ним grep -a
, но мне было интересно, какие изменения заставили его решить, что файл теперь является двоичным.
У меня есть копия с прошлого месяца, где файл больше не определяется как двоичный файл, но для diff
них это не практично, поскольку они отличаются> 20 000 строк.
file
идентифицирует мой файл как
UTF-8 текст на английском языке Unicode, с очень длинными строками
Как я могу найти символы / линии / и т.д. в моем файле, которые вызывают это изменение?
Подобный, неповторяющийся вопрос 19907 охватывает возможность NUL, но grep -Pc '[\x00-\x1F]'
говорит, что у меня нет NUL или каких-либо других контрольных символов ANSI.
nul
и некоторые Esc
с. Я попытался найти их. Я мог найти esc
s ( \x1B
), но так и nul
не появился. Тест, приведенный выше, показал 1 для строки, содержащей Esc
s, но ничего для любого диапазона, который не содержал \x1B
. Я бы не стал доверять этому тесту. Попробуйте grep -zc .
вместо этого (должно быть на единицу больше, чем число nul
s в вашем файле). (Кроме того, вы могли бы лучше использовать [[:cntrl:]]
.)
sed -z 's/.*\(....\)$/\1/' foo | od -c
увидеть несколько символов перед NUL
(если они есть), что может привести к проблеме.
sed
не имеет -z
опции: sed: invalid option -- 'z'
.