grep retorna “Correspondências de arquivos binários (entrada padrão)” ao tentar encontrar um padrão de sequência no arquivo


71

Estou no Ubuntu e digitei cat .bash_history | grep gite ele retornou

Correspondências de arquivos binários (entrada padrão)

Meu bash_historyexiste e há muitas linhas nele que começam com git.

O que causou a exibição desse erro e como posso corrigi-lo?


Qual é a saída de file .bash_history( file ~/.bash_history)?
heemayl

a saída é.bash_history: data
answerSeeker

por alguma razão, isso estava acontecendo apenas com meus logs do apache. obrigado pelas
perguntas

Respostas:


11

Presumivelmente, o arquivo .bash_historycomeça com dados que não são de texto, portanto, grepestá tratando o arquivo como binário. Isso é confirmado pela file .bash_historysaída:

.bash_history: data 

Você pode ler alguns bytes desde o início para ter uma visão em conformidade:

head -c1K .bash_history 

Aqui estou lendo primeiro 1 KiB.

Você pode canalizar o STDOUT para hexdump/ odou similar.


Como uma observação lateral, greptoma o (s) nome (s) do (s) nome (s) do arquivo como argumento, então caté inútil aqui; apenas faça:

grep git .bash_history

Ainda não sei como resolver o problema grep, head -c1k .bash_historyleia as primeiras 38 linhas do meu arquivo .bash_history. Tudo estava legível
answerSeeker

2
@TatakaiWasumi Qual é a saída de grep -a git .bash_history?
heemayl

11
Isso funcionou! Consegui tudo o que queria. O que -afaz?
answerSeeker

6
@TatakaiWasumi -afaz greppara tratar o arquivo como binário.
heemayl

3
-afaça grepprocessar um arquivo binário como se fosse texto.
Lashgar:

128

Você pode usar grep -a 'pattern'.

da página man grep :

-a, --text
Process a binary file as if it were text; this is equivalent to the ‘--binary-files=text’ option.

Isso me ajudou ao usar a -zbandeira para corresponder em várias linhas.
stragu

Esta resposta deve ser a melhor para esta pergunta.
Michael Pacheco

Sim, esta resposta é muito mais adequada!
Daywalker 13/07

3

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 grepleva nomes de arquivos e catseria inútil. Isso não é inteiramente verdade. Na greppágina do manual s:

Se nenhum arquivo for especificado, ou se o arquivo “-” for fornecido, o grep pesquisará a entrada padrão.

Então você pode usar cate canalizar para grep. No entanto, isso não resolve o problema que .bash_historyé tratado como um binário. A única coisa certa é usar grep -a(como na resposta de @AK_) se você faz grepa história diretamente ou com catum cachimbo.


cat .bash_history | grep -a git

ou

grep -a git .bash_history


Obrigado! Funciona bem para mim
Michael Pacheco
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.