Соответствует стандартному двоичному вводу

Обновлено: 01.06.2024

Выбор и интерпретация регулярных выражений:
-E, --extended-regexp ШАБЛОН представляет собой расширенное регулярное выражение (ERE)
-F, --fixed-string ШАБЛОН представляет собой набор строки
-G, --basic-regexp ШАБЛОН — базовое регулярное выражение (BRE)
-P, --perl-regexp ШАБЛОН — регулярное выражение Perl
-e, --regexp =ШАБЛОН использовать ШАБЛОН для сопоставления
-f, --file=ФАЙЛ получить ШАБЛОН из ФАЙЛА
-i, --ignore-case игнорировать различия в регистре
-w, --word-regexp force ШАБЛОН для соответствия только целым словам
-x, --line-regexp заставляет ШАБЛОН соответствовать только целым строкам
-z, --null-data строка данных заканчивается 0 байтом, а не новой строкой

Разное:
-s, --no-messages подавлять сообщения об ошибках
-v, --invert-match выбирать несовпадающие строки
-V, --version отображать информацию о версии и выйти
--help отобразить этот текст справки и выйти

Управление выводом:
-m, --max-count=NUM остановить после того, как NUM совпадает с
-b, --byte-offset вывести смещение в байтах со строками вывода
-n, --line-number вывести номер строки с выходными строками
--line-buffered вывод данных на сброс в каждой строке
-H, --with-filename вывести имя файла для каждого совпадения
-h , --no-filename скрыть префикс имени файла на выходе
--label=LABEL использовать LABEL в качестве стандартного префикса имени входного файла
-o, --only-matching показать только часть строки соответствие ШАБЛОНУ
-q, --quiet, --silent подавить весь нормальный вывод
--binary-files=TYPE предположить, что двоичные файлы являются TYPE;
TYPE — это 'двоичный', 'текстовый' или 'без соответствия'
-a, --text эквивалентно --binary-files=text
-I эквивалентно --binary -files=без совпадения
-d, --directories=ДЕЙСТВИЕ как обращаться с каталогами;
ДЕЙСТВИЕ 'чтение', 'рекурсия' или 'пропуск'
-D, --devices=ДЕЙСТВИЕ как обрабатывать устройства, FIFO и сокеты;
ДЕЙСТВИЕ 'прочитано' или 'пропущено'
-r, --recursive как --directories=recurse
-R, --dereference-recursive
аналогично, но следовать всем символические ссылки
--include=ШАБЛОН_ФАЙЛА
искать только те файлы, которые соответствуют ШАБЛОНУ_ФАЙЛА
--exclude=ШАБЛОН_ФАЙЛА
пропускать файлы и каталоги, соответствующие ШАБЛОНУ_ФАЙЛА
--exclude-from=FILE пропускать файлы, соответствующие любому шаблону файла из ФАЙЛА
--exclude-dir=ШАБЛОН каталоги, соответствующие ШАБЛОНУ, будут пропущены.
-L, --files-without-match выводить только имена ФАЙЛОВ, не содержащих совпадений
-l, --files-with-matches выводить только имена ФАЙЛОВ, содержащих совпадения
-c, --count вывести только количество совпадающих строк в ФАЙЛЕ
-T, --initial-tab выровнять вкладки (при необходимости)
-Z, --null вывести 0 байт после имени ФАЙЛА

Управление контекстом:
-B, --before-context=ЧИСЛО печатать ЧИСЛО строк начального контекста
-A, --after-context=ЧИСЛО печатать ЧИСЛО строк конечного контекста
-C, --context=ЧИСЛО вывести ЧИСЛО строк выходного контекста
-ЧИСЛО аналогично --context=ЧИСЛО
--group-separator=SEP использовать SEP в качестве разделителя групп
-- no-group-separator использовать пустую строку в качестве разделителя групп
--color[=WHEN],
--color[=WHEN] использовать маркеры для выделения совпадающих строк;
КОГДА установлено значение «всегда», «никогда» или «авто»
-U, --binary не удалять символы CR в EOL (MSDOS/Windows)
-u, --unix -byte-offsets сообщает о смещениях, как если бы CR не было
(MSDOS/Windows)

'egrep' означает 'grep -E'. 'fgrep' означает 'grep -F'.
Прямой вызов как 'egrep' или 'fgrep' устарел.
Когда ФАЙЛ равен -, читать стандартный ввод. Без ФАЙЛА читать . если задана командная строка
-r, - иначе. Если задано менее двух ФАЙЛОВ, предполагается -h.
Статус выхода: 0, если выбрана какая-либо строка, иначе 1;
если возникает какая-либо ошибка и параметр -q не указан, статус выхода равен 2.

Итак:

[stack@undercloud ~]$ ipmitool -I lanplus -U hp -P пароль -H 192.168.1.11 список fru | grep -a "Серийный номер продукта"

或者:

[stack@undercloud ~]$ ipmitool -I lanplus -U hp -P пароль -H 192.168.1.11 список fru | grep --text "Серийный номер продукта"

Я пытаюсь использовать команду diff в сочетании с командой grep, чтобы найти разницу между двумя файлами. Другими словами, у меня есть вчерашний файл и сегодняшний файл, мне нужно найти строки, которые являются новыми в сегодняшнем файле, т.е. которых не было во вчерашнем файле.

Я использую приведенную ниже команду, чтобы поместить требуемый вывод в файл 'diff.TXT':

Это работало нормально, пока сегодня не было создано 'diff.TXT' как:

Это произошло в моей рабочей среде, но работает в тестовой среде. Поэтому я попытался отладить это, разбив команду в тестовой среде.

Я разбил исходную команду на 2 части:

Увы, я получаю ту же ошибку в тестовой среде, что и в рабочей.

Мне это кажется очень странным.

Одна странная вещь в тестовой среде, которую я заметил при попытке разделить команду, заключается в том, что при выполнении file -i temp.txt она дает двоичный файл.

Может кто-нибудь помочь с этим

1 Ответ 1

-a, --text

Обрабатывать двоичный файл, как если бы он был текстовым; это эквивалентно параметру --binary-files=text.

--binary-files=TYPE

Если первые несколько байтов файла указывают, что файл содержит двоичные данные , предположим, что файл имеет тип TYPE. По умолчанию TYPE является двоичным, и grep обычно выводит либо однострочное сообщение о том, что двоичный файл соответствует, либо не выводит никакого сообщения, если совпадений нет. Если TYPE не соответствует, grep предполагает, что двоичный файл не соответствует; это эквивалентно опции -I. Если TYPE — это текст, grep обрабатывает двоичный файл, как если бы он был текстовым; это эквивалентно опции -a. Предупреждение: grep --binary-files=text может выводить двоичный мусор, который может иметь неприятные побочные эффекты, если вывод является терминалом и если драйвер терминала интерпретирует некоторые из них как команды.

grep сканирует файл и, если находит какие-либо нечитаемые символы, предполагает, что файл находится в двоичном формате. Добавьте переключатель -a в grep, чтобы он обрабатывал файл как читаемый текст. Скорее всего, ваши входные файлы содержат нечитаемые символы.

Моя история bash_history существует, и в ней много строк, начинающихся с git .

Что вызвало появление этой ошибки и как ее исправить?

5 ответов

Предположительно, файл .bash_history начинается с нетекстовых данных, поэтому grep обрабатывает файл как двоичный. Это подтверждается выводом файла .bash_history:

Вы можете прочитать несколько байтов от начала, чтобы получить соответствующее представление:

Здесь я читаю первый 1 КиБ.

Вы можете направить STDOUT в hexdump / od или аналогичный.

Кстати, grep принимает имена файлов в качестве аргумента, поэтому cat здесь бесполезен; попробуйте это:

Правильный ответ от heemayl от 19 февраля 2021 г.

Это может быть вызвано нулевыми байтами в истории bash. Удаление строк с нулевыми символами может решить проблему. Вы можете проверить их, используя режим Perl-regexp в grep:

В этом сообщении есть предложения для систем, отличных от Unix.

Ответ Брэда Нельсона от 19 февраля 2021 г.

Ошибка связана с тем, что данные в файле являются двоичными, вы можете использовать команду strings, чтобы увидеть удобочитаемую часть (т.е. строки), которую вы обычно ищете с помощью grep

строковые данные | grep -я что угодно

Отвечает Гаджрадж Сингх Чоухан, 19 февраля 2021 г.

У меня была такая же проблема, когда я хотел найти свой .bash_history . (Небольшое примечание: я переименовал свою историю, чтобы была создана новая. Эта новая история не рассматривалась как двоичная.)

В ответе @heemayls указано, что grep принимает имена файлов, и cat будет бесполезен. Это не совсем правда. Со страницы руководства grep:

Если файлы не указаны или указан файл со знаком "-", grep ищет стандартный ввод.

Таким образом, вы можете использовать cat и направить его в grep . Однако это не решает проблему, связанную с тем, что .bash_history рассматривается как двоичный файл. Единственное правильное решение — использовать grep -a (как в ответе @AK_), независимо от того, используете ли вы grep для истории напрямую или с помощью кота и трубы.

Ответ SSCMuchacho от 19 февраля 2021 г.

Вы можете использовать grep -a 'шаблон' .

-a, --text
Обрабатывать двоичный файл, как если бы он был текстовым; это эквивалентно параметру --binary-files=text.

Я использую Ubuntu и набрал cat .bash_history | grep git и он вернулся

Двоичный файл (стандартный ввод) соответствует

Моя история bash_history существует, и в ней много строк, начинающихся с git .

Что вызвало появление этой ошибки и как ее исправить?

Что выводит `file .bash_history` (`file ~/.bash_history`)?

вывод: `.bash_history: данные`

billynoah

по какой-то причине это происходило только с моими журналами Apache. спасибо за вопросы и ответы

heemayl Отключите AdBlock, чтобы увидеть правильный ответ

Предположительно файл ..

Этот сайт выживает благодаря рекламе. Отключите AdBlock, чтобы увидеть правильный ответ целиком бесплатно!
Обещаем, скучной рекламы вы не найдете. Узнайте, как отключить Adblock, нажав на эту ссылку.
Не забудьте обновить страницу после ее отключения.

Я до сих пор не знаю, как решить проблему с grep, `head -c1k .bash_history` прочитал первые 38 строк моего файла .bash_history. Все было читабельно

@TatakaiWasumi Что выводит `grep -a git .bash_history`?

Это сработало! Я получил от него все, что хотел. Что делает `-a`?

@TatakaiWasumi `-a` заставляет `grep` обрабатывать файл как двоичный.

странно, есть ли способ преобразовать мою историю bash обратно в текстовый файл, если grep считает ее двоичной?

@TatakaiWasumi, не могли бы вы просмотреть файл и проверить наличие необычных строк?

lashgar

`-a` make `grep` process a binary file as if it were text.

Presumably the file .bash_history starts with non-text data, hence grep is treating the file as binary. This is confirmed by the file .bash_history output:

You can read a few bytes from start to have a conforming view:

Here I am reading first 1 KiB.

You can pipe the STDOUT to hexdump / od or similar.

As a side note, grep takes filename(s) as argument, so cat is useless here; try this:

I'm still not sure how to solve the grep issue, `head -c1k .bash_history` read the first 38 lines of my .bash_history file. Everything was readable

@TatakaiWasumi Whats the output of `grep -a git .bash_history`?

That worked! I got everything I wanted from it. What does `-a` do?

@TatakaiWasumi `-a` makes `grep` to treat the file as binary.

that's weird, is there a way to convert my bash history back to a text file if grep thinks it's binary?

@TatakaiWasumi can you go through the file and check for any unusual string?

lashgar

`-a` make `grep` process a binary file as if it were text.

License under CC-BY-SA with attribution Content dated before 7/24/2021 11:53 AM


第四单元 于 2020-11-18 13:29:00 发布 77 收藏

使用grep -a “搜索内容”
加上-a选项就可以了


10-30 2182

Linux使用grep命令,从文件中抓取显示特定的信息,如下: cat 文件名 | grep 特定条件 cat xxxx | grep 12345 结果报错: Binary file (standard input) matches;经过查询后,意思为文件是二进制文件,不能直接grep 解决办法: cat 文件名 | grep -a 特定条件 cat xxxx | grep -a 1234.


10-29 206


10-12 3万+

grep的时候Binary file matches **.log 怎么解决 软件 分享到: 专业回答 2015-01-14 11:21 操作 grep "xxx" a.log 结果 Binary file a.log matches 原因:grep认为a.log是二进制文件 解决方法:grep -a "xxx" a.l


03-30 946

今天下载日志查看的时候,使用grep命令发现报错: Binary file (standard input) matches 大致意思是,二进制文件不能直接进行搜索。 查看grep帮助信息: -a选项,可以将二进制文件声明为文本文件。这样就可以顺利使用grep命令了。 .


12-10 67


12-25 373


01-20 4041

场景: 在linux服务器上查看日志,使用如下命令: cat root.log | grep "xxxxxxxxxx" 报错: binary file (standard input) matches cat 原因:意思为文件是二进制文件,不能直接grep 解决方案: cat root.log | grep -a "xxxxxxxxxx"


05-19 5158

解决方案: 给 grep 命令 加上 -a ; 例如 grep xxx.log ----> >>> grep -a xxx.log 缘由: 最近 将 以前写的 日志分析 脚本 从 阿里云 转移到 腾讯云上。。。。今天 一看 邮件 发现 少了 很多 内容。。。就知道 shell 脚本 出问题了。。。 出问题了。。。。。怎么办。。。。。。 如何定位问题:


01-03 705


12-04 295

Linux使用grep命令,从文件中抓取显示特定的信息,如下: cat文件名 | grep 特定条件 ---> cat xxxx | grep 12345 结果报错:Binary file (standard input) matches;经过查询后,意思为文件是二进制文件,不能直接grep,解决办法: cat 文件名 | grep -a .


01-12 275

cat /log |grep -v 'INFO' 查看log日志的时候报错 Binary file (standard input) matches,提示文件是二进制文件。 修改语句cat /log |grep -va 'INFO'成功查看文件。 注:-a以文本形式查看文件; -v过滤掉'INFO'信息。


09-04 103


07-19 2万+


02-28 151

操作 grep "xxx" a.log 结果 Binary file a.log matches 原因:grep认为a.log是二进制文件 解决方法: grep -a "xxx" a.log 可以看看grep -a参数的功能 [appadmin@test3 ~/tmp]$ grep --help |grep '/-a'-a, --text .


06-22 46


06-08 539


03-23 4397

Vulnhub靶机DC3渗透测试详解Vulnhub靶机介绍:Vulnhub靶机下载:Vulnhub靶机安装:Vulnhub靶机漏洞详解:①:信息收集:②:漏洞发现:③:SQL注入:④:文件上传:⑤:提权: Vulnhub靶机介绍: vulnhub是个提供各种漏洞平台的综合靶场,可供下载多种虚拟机进行下载,本地VM打开即可,像做游戏一样去完成渗透测试、提权、漏洞利用、代码审计等等有趣的实战。 从靶机DC-3开始,只有一个最终的flag,只有拿到root权限才可以发现最终的flag。 Vulnhub靶机下载:


03-27 525

Читайте также: