Eu tenho arquivos binários que devem ser texto (são logs exportados), mas não consigo abri-lo com menos (parece feio - parece um arquivo binário). Descobri que era possível abri-lo com o vi e posso obtê-lo (você verá os logs reais), mas o que eu realmente gostaria de fazer é fazer um grep através deles (sem ter que abrir cada um com o vi e executar uma pesquisa). Existe uma maneira de eu fazer isso?
76
grep -a
?Respostas:
Você pode usar de
grep
qualquer maneira para pesquisar no arquivo - ele realmente não se importa se o arquivo de entrada é realmente texto ou não. Do 'man grep':Por favor, marque as palavras de cautela no final do segundo parágrafo. Você pode redirecionar os resultados do grep para um novo arquivo e examiná-lo com vi / less.
fonte
Canalize-o
strings
, o que removerá todo o código binário, deixando apenas o texto.fonte
strings
aparentemente não entende utf-8 é texto.Dê
bgrep
uma chance. ( versão original / fork mais recente )fonte
\x
realmente não funciona como aquigrep -P "\x05\x00\xc0" mybinaryfile
.bgrep "fafafafa" test_27.6.2015.bin |less
mas obtenho test_27.6.2015.bin: 00005ee4 . Eu assumiria que fafafafa , já que estava pesquisando isso. Nenhum manual no homem. Alguma idéia de por que essa saída?grep -a
?bash: bgrep: command not found...
eNo package bgrep available
.Você pode usar estes três comandos:
grep -a <sth> file.txt
cat -v file.txt | grep <sth>
cat file.txt | tr '[\000-\011\013-\037\177-\377]' '.' | grep <sth>
fonte
A partir do Grep 2.21, os arquivos binários são tratados de maneira diferente :
Então, o que acontece agora é que, com dados binários, todos os bytes que não são de texto (incluindo novas linhas) são tratados como terminadores de linha. Se você deseja alterar esse comportamento, você pode:
use
--text
. Isso garantirá que apenas as novas linhas sejam terminadores de linhause
--null-data
. Isso garantirá que apenas bytes nulos sejam terminadores de linhafonte