Estou no Ubuntu e digitei cat .bash_history | grep git
e ele retornou
Correspondências de arquivos binários (entrada padrão)
Meu bash_history
existe e há muitas linhas nele que começam com git
.
O que causou a exibição desse erro e como posso corrigi-lo?
file .bash_history
(file ~/.bash_history
)?.bash_history: data
Respostas:
Presumivelmente, o arquivo
.bash_history
começa com dados que não são de texto, portanto,grep
está tratando o arquivo como binário. Isso é confirmado pelafile .bash_history
saída:Você pode ler alguns bytes desde o início para ter uma visão em conformidade:
Aqui estou lendo primeiro 1 KiB.
Você pode canalizar o STDOUT para
hexdump
/od
ou similar.Como uma observação lateral,
grep
toma o (s) nome (s) do (s) nome (s) do arquivo como argumento, entãocat
é inútil aqui; apenas faça:fonte
head -c1k .bash_history
leia as primeiras 38 linhas do meu arquivo .bash_history. Tudo estava legívelgrep -a git .bash_history
?-a
faz?-a
fazgrep
para tratar o arquivo como binário.-a
façagrep
processar um arquivo binário como se fosse texto.Você pode usar
grep -a 'pattern'
.da página man grep :
fonte
-z
bandeira para corresponder em várias linhas.Eu vi essa pergunta hoje, porque tive o mesmo problema quando quero cumprimentar o meu
.bash_history
. (Nota: renomeei meu histórico para criar um novo. Esse novo histórico não foi tratado como binário.)Na resposta @heemayls, é declarado que
grep
leva nomes de arquivos ecat
seria inútil. Isso não é inteiramente verdade. Nagrep
página do manual s:Então você pode usar
cat
e canalizar paragrep
. No entanto, isso não resolve o problema que.bash_history
é tratado como um binário. A única coisa certa é usargrep -a
(como na resposta de @AK_) se você fazgrep
a história diretamente ou comcat
um cachimbo.cat .bash_history | grep -a git
ou
grep -a git .bash_history
fonte