Jestem na Ubuntu i pisałem na maszynie, cat .bash_history | grep git
a ona wróciła
Plik binarny (standardowe wejście) pasuje
Mój bash_history
istnieje i jest w nim wiele linii, które zaczynają się od git
.
Co spowodowało wyświetlenie tego błędu i jak mogę go naprawić?
file .bash_history
(file ~/.bash_history
)?.bash_history: data
Odpowiedzi:
Prawdopodobnie plik
.bash_history
zaczyna się od danych nietekstowych, dlategogrep
traktuje plik jako plik binarny. Potwierdza tofile .bash_history
wynik:Możesz przeczytać kilka bajtów od początku, aby uzyskać zgodny widok:
Tutaj czytam pierwszy 1 KiB.
Możesz przesłać STDOUT do
hexdump
/od
lub podobnego.Na marginesie,
grep
bierze nazwę pliku (-ów) jako argument, więccat
tutaj jest bezużyteczny; po prostu zrób:źródło
head -c1k .bash_history
przeczytaj pierwsze 38 wierszy mojego pliku .bash_history. Wszystko było czytelnegrep -a git .bash_history
?-a
zrobić?-a
sprawia,grep
że plik jest traktowany jako binarny.-a
przekształćgrep
plik binarny tak, jakby był tekstem.Możesz użyć
grep -a 'pattern'
.ze strony man grep :
źródło
-z
flagi do dopasowania w kilku liniach.Widziałem to pytanie dzisiaj, ponieważ miałem ten sam problem, kiedy chcę grep mój
.bash_history
. (Mała uwaga: zmieniłem nazwę mojej historii, aby powstała nowa. Ta nowa historia nie była traktowana jako plik binarny).W odpowiedzi @heemayls jest powiedziane, że
grep
pobiera nazwy plików icat
byłby bezużyteczny. To nie do końca prawda. Zegrep
strony podręcznika użytkownika:Możesz więc użyć go
cat
i potokowaćgrep
. Nie rozwiązuje to jednak problemu, który.bash_history
jest traktowany jako plik binarny. Jedyną słuszną rzeczą jest użyciegrep -a
(jak w odpowiedzi z @AK_) niezależnie od tego, czy maszgrep
historię bezpośrednio, czy zacat
pomocą fajki.cat .bash_history | grep -a git
lub
grep -a git .bash_history
źródło