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