Jak ukryć wyniki dopasowywania plików binarnych w grep [zamknięte]

215

Podczas używania grepw systemie Linux wynik często zawiera wiele „dopasowań pliku binarnego XXX”, na których mnie to nie obchodzi. Jak ukryć tę część wyników lub jak wykluczyć pliki binarne w grep?

RandyTek
źródło
12
grep -I .........
1
@skwllsp Ale przy opcji -l wyniki nie zawierają dopasowanej linii, a jedynie dopasowaną nazwę pliku.
RandyTek,
Istnieje opcja dla linii: grep -I -n -H
6
To nie jest temat? Wow
CoffeeTableEspresso

Odpowiedzi:

302

Istnieją trzy opcje, których możesz użyć. -Ijest wykluczenie plików binarnych w grep. Inne dotyczą numerów linii i nazw plików.

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

Może to być sposób na uruchomienie grep:

grep -InH your-word *
184968
źródło
to działa. Dzięki @skwllsp
RandyTek
7
Użyłbym, -Irngdzie roznacza rekurencję, aby zajrzeć do wszystkich folderów. Hjest tutaj wyjątkowo
vladkras,
@vladkras, „H jest tutaj nadmierna” - masz na myśli redundancję, tzn. jest już domyślna?
cp.engr
Dziękujemy za wyjaśnienie, co oznaczają krótkie opcje w odpowiedzi. Na SO jest tak wiele odpowiedzi na polecenia z linse, które nie dają żadnego wyjaśnienia, co mnie denerwuje.
jrahhali
1
@AaronFranke: -nFlaga informuje grep, aby zgłosił numery wierszy plików, w których znalazł dopasowanie. „1-oparty” oznacza, że ​​liczenie linii zaczyna się od jednego, a nie od zera, jak to często się dzieje w programowaniu. Tak więc, jeśli pierwszy wiersz o nazwie pliku example.txtto Hello, world, drugi wiersz to Hello cat, a trzeci wiersz to cats are cool, a następnie wyszukanie „cat” przez grep -n cat example.txt, otrzymasz example.txt:2: Hello cati example.txt:3: cats are cool.
jvriesem
11

To stare pytanie, na które udzielono odpowiedzi, ale pomyślałem, że umieszczę tutaj opcję --binary-files = text dla każdego, kto chce z niej skorzystać. Opcja -I ignoruje plik binarny, ale jeśli chcesz, aby grep traktował plik binarny jako plik tekstowy, użyj --binary-files = tekst tak:

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$
amadain
źródło