Назад | Перейти на главную страницу

Как выполнить поиск двоичных файлов, которые выглядят как текст?

У меня есть двоичные файлы, которые должны быть текстовыми (это экспортированные журналы), но я не могу открыть их меньшим количеством (выглядит некрасиво - похоже на двоичный файл). Я обнаружил, что могу открыть его с помощью vi, и я могу его перехватить (вы увидите фактические журналы), но что мне действительно хотелось бы сделать, так это grep через них (без необходимости открывать каждый из них с помощью vi, а затем выполнять поиск). Есть ли у меня способ сделать это?

Ты можешь использовать 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, который удалит весь двоичный код, оставив только текст.

Вы можете использовать эти три команды:

  1. grep -a <sth> file.txt

  2. cat -v file.txt | grep <sth>

  3. cat file.txt | tr '[\000-\011\013-\037\177-\377]' '.' | grep <sth>

Начиная с Grep 2.21, двоичные файлы относиться по-другому:

При поиске двоичных данных grep теперь может обрабатывать нетекстовые байты как терминаторы строки. Это может значительно повысить производительность.

Теперь происходит то, что с двоичными данными все нетекстовые байты (включая символы новой строки) обрабатываются как терминаторы строки. Если вы хотите изменить это поведение, вы можете:

  • использовать --text. Это гарантирует, что только символы новой строки будут терминаторами строки.

  • использовать --null-data. Это гарантирует, что только нулевые байты будут терминаторами строки.