Estou no Ubuntu e digitei cat .bash_history | grep git e ele retornou
Arquivo binário (entrada padrão) corresponde a
Meu bash_history existe e contém muitas linhas que começa com git.
O que causou a exibição desse erro e como posso corrigi-lo?
Comentários
Resposta
Presuma bly o arquivo .bash_history começa com dados não textuais, portanto, grep está tratando o arquivo como binário. Isso é confirmado pela file .bash_history saída:
.bash_history: data
Você pode ler alguns bytes do início para ter uma conformidade visualizar:
head -c1K .bash_history
Aqui estou lendo o primeiro 1 KiB.
Você pode canalizar o STDOUT para hexdump / od ou semelhante.
Como uma observação lateral, grep leva o nome do arquivo ( s) como argumento, então cat é inútil aqui; tente isto:
grep git .bash_history
Comentários
- I ' ainda não tenho certeza de como resolver o problema grep,
head -c1k .bash_historyleia as primeiras 38 linhas do meu arquivo .bash_history. Tudo estava legível - @TatakaiWasumi Qual é o resultado de
grep -a git .bash_history? - Funcionou! Consegui tudo o que queria com isso. O que
-afaz? - @TatakaiWasumi
-afazgreppara tratar o arquivo como binário. -
-amakegrepprocessa um arquivo binário como se fosse texto.
Resposta
Você pode usar grep -a "pattern".
da página man grep :
-a, –text
Processa um arquivo binário como se fosse texto; isso é equivalente à opção –binary-files = text .
Comentários
- Isso me ajudou ao usar o sinalizador
-zpara corresponder em várias linhas. - Funcionou para mim, mas ainda é estranho porque meu arquivo não é ' um arquivo binário. [grid @ serverdg2 trace] $ file listener.log listener.log: data
Resposta
Eu tive a mesmo problema quando eu quero grep meu .bash_history. (Pequena nota: renomeei meu histórico para que um novo fosse criado. Esse novo histórico não foi tratado como binário.)
Na resposta @heemayls afirma-se que grep leva nomes de arquivos e cat seria inútil. Isso não é inteiramente verdade. Da página de manual grep s:
Se nenhum arquivo for especificado ou se o arquivo “-” for dado, grep pesquisa a entrada padrão.
Então você poderia usar cat e canalizá-lo para grep. No entanto, isso não resolve o problema de .bash_history ser tratado como binário. A única coisa certa é usar grep -a (como na resposta de @AK_) se você grep o histórico diretamente ou com cat e um tubo.
cat .bash_history | grep -a git
ou
grep -a git .bash_history
Resposta
O erro é devido aos dados no arquivo serem binários, você pode usar o comando de strings para ver o legível por humanos (ou seja strings) parte que você normalmente pesquisaria usando grep
strings data | grep -i whatever
Comentários
- Isso não aborda a primeira parte da pergunta, ou seja, " o que causa o problema ".
Resposta
Isso pode ser causado por bytes nulos em seu histórico do bash. Remover linhas com caracteres nulos pode resolver o problema. Você pode verificá-los usando o modo Perl-regexp grep “s:
grep -Pa "\x00" .bash_history
Esta postagem tem sugestões para sistemas não-unix.
file .bash_history(file ~/.bash_history)?.bash_history: data