Как я пролистываю двоичные файлы, которые выглядят как текст?
У меня есть двоичные файлы, которые должны быть текстовыми (это экспортированные журналы), но я не могу открыть их с меньшим количеством (это выглядит некрасиво - это выглядит как двоичный файл). Я обнаружил, что могу открыть его с помощью vi и могу отследить его (вы увидите реальные журналы), но я действительно хотел бы просмотреть их (без необходимости открывать каждый с помощью vi, а затем выполнить поиск). Есть ли способ для меня это сделать?
5 ответов
Ты можешь использовать grep
в любом случае, для поиска по файлу - его не волнует, является ли входной файл действительно текстовым или нет. От "man grep":
-a, --text
Process a binary file as if it were text; this is equivalent to the --binary-files=text option.
--binary-files=TYPE
If the first few bytes of a file indicate that the file contains binary data, assume that the file is
of type TYPE. By default, TYPE is binary, and grep normally outputs either a one-line message saying
that a binary file matches, or no message if there is no match. If TYPE is without-match, grep assumes
that a binary file does not match; this is equivalent to the -I option. If TYPE is text, grep
processes a binary file as if it were text; this is equivalent to the -a option. Warning: grep
--binary-files=text might output binary garbage, which can have nasty side effects if the output is a
terminal and if the terminal driver interprets some of it as commands.
Пожалуйста, отметьте слова предостережения в конце второго абзаца. Возможно, вы захотите перенаправить результаты из grep в новый файл и проверить это с помощью vi / less.
Труба это через strings
, который удалит весь двоичный код, оставив только текст.
Дать bgrep
попытка ( оригинальный релиз / более поздняя версия)
Вы можете использовать эти три команды:
grep -a <sth> file.txt
cat -v file.txt | grep <sth>
cat file.txt | tr '[\000-\011\013-\037\177-\377]' '.' | grep <sth>
Начиная с Grep 2.21, двоичные файлы обрабатываются по-разному:
При поиске двоичных данных grep теперь может обрабатывать нетекстовые байты в качестве ограничителей строки. Это может значительно повысить производительность.
Итак, что происходит сейчас, так это то, что с двоичными данными все нетекстовые байты (включая переводы строк) обрабатываются как разделители строк. Если вы хотите изменить это поведение, вы можете:
использование
--text
, Это гарантирует, что только переводы строк являются символами конца строкииспользование
--null-data
, Это гарантирует, что только нулевые байты являются ограничителями строки