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?


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 *

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$
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.