Mam pliki binarne, które powinny być tekstem (są to wyeksportowane dzienniki), ale nie mogę otworzyć go mniej (wygląda brzydko - wygląda jak plik binarny). Odkryłem, że mogę otworzyć go za pomocą vi i mogę to zrobić (zobaczysz rzeczywiste dzienniki), ale tak naprawdę chciałbym to zrobić, przechodząc przez nie (bez konieczności otwierania każdego z nich za pomocą vi, a następnie wykonywania wyszukiwanie). Czy jest na to sposób?
76
grep -a
?Odpowiedzi:
Tak czy
grep
inaczej możesz użyć do przeszukiwania pliku - tak naprawdę nie ma znaczenia, czy plik wejściowy to naprawdę tekst, czy nie. Od „man grep”:Proszę zaznaczyć słowa ostrzeżenia na końcu drugiego akapitu. Możesz przekierować wyniki z grep do nowego pliku i sprawdzić to za pomocą vi / less.
źródło
Przeciągnij go
strings
, co spowoduje usunięcie całego kodu binarnego, pozostawiając tylko tekst.źródło
strings
najwyraźniej nie rozumie, że utf-8 to tekst.Dać
bgrep
szansę. ( oryginalne wydanie / nowszy widelec )źródło
\x
nie działa tak jak tutajgrep -P "\x05\x00\xc0" mybinaryfile
.bgrep "fafafafa" test_27.6.2015.bin |less
ale dostać test_27.6.2015.bin: 00005ee4 . Zakładałbym , że dostanę fafafafa , ponieważ tego szukałem. Brak instrukcji obsługi u człowieka. Masz pomysł, dlaczego taki wynik?grep -a
?bash: bgrep: command not found...
iNo package bgrep available
.Możesz użyć tych trzech poleceń:
grep -a <sth> file.txt
cat -v file.txt | grep <sth>
cat file.txt | tr '[\000-\011\013-\037\177-\377]' '.' | grep <sth>
źródło
Począwszy od Grep 2.21, pliki binarne są traktowane inaczej :
Tak więc teraz dzieje się tak, że w przypadku danych binarnych wszystkie bajty nietekstowe (w tym nowe wiersze) są traktowane jako terminatory linii. Jeśli chcesz zmienić to zachowanie, możesz:
użyć
--text
. Zapewni to, że tylko nowe linie są zakończeniami liniiużyć
--null-data
. Zapewni to, że tylko bajty zerowe są zakończeniami liniiźródło