Як придушити результати зіставлення бінарних файлів у grep [закрито]


215

При використанні grepв Linux, результат часто містить багато "збігів бінарних файлів XXX", які мене не цікавлять. Як придушити цю частину результатів або як виключити бінарні файли у вигляді grep?


12
grep -I .........

1
@skwllsp Але з -l, результати не містять відповідного рядка, лише з відповідним ім'ям файлу.
RandyTek

Є варіант для рядків: grep -I -n -H

6
Це поза темою? Нічого собі
CoffeeTableEspresso

Відповіді:


302

Є три варіанти, якими ви можете скористатися. -Iце виключити бінарні файли в grep. Інші стосуються номерів рядків та назв файлів.

grep -I -n -H 


-I -- process a binary file as if it did not contain matching data; 
-n -- prefix each line of output with the 1-based line number within its input file
-H -- print the file name for each match

Тож це може бути спосіб запуску grep:

grep -InH your-word *

це працює. Thx @skwllsp
RandyTek

7
Я б використав -Irnтам, де rстоїть рекурсивний, щоб заглянути все папки. Hтут ексцесивний
vladkras

@vladkras, "Н тут надмірний" - ви маєте на увазі зайве, тобто це вже за замовчуванням?
cp.engr

Дякуємо, що пояснили, що означають короткі варіанти у вашій відповіді. Є так багато коротких відповідей команд Linux на ТА, що не дають пояснень, що я вважаю дратує.
jrahhali

1
@AaronFranke: -nпрапор повідомляє grep повідомляти про номер рядків файлів, у яких він знайшов збіг. "На основі 1" означає, що підрахунок рядків починається з одиниці, а не з нуля, як це часто робиться в програмуванні. Отже, якщо перший рядок вашого імені файлу example.txtє Hello, world, другий рядок є Hello cat, а третій рядок - cats are coolпошуком "кота" через grep -n cat example.txt, ви отримаєте example.txt:2: Hello catі example.txt:3: cats are cool.
jvriesem

11

Це старе запитання, на яке відповіли, але я подумав, що я поставив би тут параметр --binary-files = text для всіх, хто хоче ним скористатися. Параметр -I ігнорує двійковий файл, але якщо ви хочете, щоб греп розглядав двійковий файл як текстовий файл, використовуйте --binary-files = текст так:

bash$ grep -i reset mediaLog*
Binary file mediaLog_dc1.txt matches
bash$ grep --binary-files=text -i reset mediaLog*
mediaLog_dc1.txt:2016-06-29 15:46:02,470 - Media [uploadChunk  ,315] - ERROR - ('Connection aborted.', error(104, 'Connection reset by peer'))
mediaLog_dc1.txt:ConnectionError: ('Connection aborted.', error(104, 'Connection reset by peer'))
bash$
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.