grep возвращает «Совпадения двоичного файла (стандартный ввод)» при попытке найти строковый шаблон в файле

$ grep -c processor /proc/cpuinfo
8

Это все, что вам нужно. Это количество ядер в сети, независимо от того, включена ли гиперпоточность.

$ ls -d /sys/devices/system/cpu/cpu* | wc -l
8

Другой простой способ.

77
08.11.2017, 00:31
4 ответа

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

.bash_history: data 

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

head -c1K .bash_history 

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

STDOUT можно направить в шестнадцатеричный дамп / od или аналогичный.


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

grep git .bash_history
25
27.01.2020, 19:30

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

из man grep страница:

-a, --text
Process a binary file as if it were text; this is equivalent to the --binary-files=text option.

286
27.01.2020, 19:30

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

strings data | grep -i whatever

2
24.03.2020, 07:57

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

grep -Pa '\x00'.bash_history

Этот пост содержит предложения для не -unix-систем.

3
15.12.2020, 22:06

Теги

Похожие вопросы