Wie grep ich für Zeilennummern in einer Binärdatei?

1051
WilliamKF

Ich arbeite mit Centos 5 Linux und verwende GNU grep v2.5.1 und sehe eine 36 GB-Protokolldatei. Es ist riesig und ich muss ungefähr eine Million Zeilen finden, beginnend mit dem Auftreten einer Zeichenfolge 6307459in der Protokolldatei, und sie in emacs anzeigen. Ich benutze grep, um die Zeilennummer des Vorkommnisses zu finden und dann headund tailzu verwenden, um den Abschnitt zu erhalten, den ich überprüfen möchte. Das Problem, vor dem ich stehe, ist, dass grepdie Zeile gefunden wird, sie mir aber nicht angezeigt wird. Stattdessen wird die Meldung gedruckt, dass es sich um eine Binärdatei handelt:

> grep -n 6307459 /disk2/user/test/logs/2015-03-31-23-42-52-7224.log  Binary file /disk2/user/test/logs/2015-03-31-23-42-52-7224.log matches 

Ich stelle mir vor, dass sich irgendwo in der Protokolldatei Steuerzeichen befinden, die grep täuschen, aber Anfang und Ende der Datei sehen aus wie normaler Text.

Ich habe versucht, sie in /disk2/user/test/logs/2015-03-31-23-42-52-7224.log.txt umzubenennen, sagt aber immer noch, dass es sich um eine Binärdatei handelt.

Wie kann ich die Zeilennummer des Auftretens des Musters 6307459 in der Datei erhalten, so dass ich 20 Zeilen vor dem Muster und 1.000.000 nach dem Muster verwenden kann headund tailsehen kann ?

0
Siehe: [Wie greife ich binäre Dateien, die wie Text aussehen?] (Http://serverfault.com/questions/328101/how-do-i-grep-through-binary-files-that-look-like-text) ) bei Serverfault SE kenorb vor 9 Jahren 0

1 Antwort auf die Frage

0
WilliamKF

Anhand des sg verknüpft Antwort von serverfault, vorbei -aan grepKräften binäre Dateien als Textdateien behandelt werden. Hier ist die detaillierte Lösung:

> grep -a -n 6307459 /disk2/user/test/logs/2015-03-31-23-42-52-7224.log 171560394:Rcvd client's reconnect count 6307459. 

Mit der gefundenen Zeilennummer von habe 171560394ich dann den folgenden Befehl erstellt, um eine Million Zeilen ab 100 Zeilen vor dem gefundenen Muster zu erhalten, damit ich sie in emacs anzeigen kann:

> head -n 172560294 /disk2/user/test/logs/2015-03-31-23-42-52-7224.log \ | tail -n 1000000 > /disk2/user/test/logs/2015-03-31-23-42-52-7224.log_mid