2017-01-30 3 views
0

Ich habe ein paar Stunden nur damit verbracht, setzt auf meinem System aus dem Konsolenprotokoll zu erkennen, wo ich:Match 2 aufeinanderfolgende Zeilen mit grep oder sed

Boot up message // 1st console output on a boot 
Shutdown message // Last console output on a CLEAN shutdown 

von grep für die 2 Zeilen mit oben auf der Konsole ausgegeben, habe ich Text, der so etwas wie enthält:

Boot up message 
Shutdown message 
Boot up message 
Shutdown message 
Boot up message 
Boot up message 
Shutdown message 

Wenn der Reset durch zwei aufeinanderfolgende Startmeldungen nachweisbar ist. Ich habe ein paar tausend Zyklen durchlaufen, so will die ‚-n‘ Schalter mit grep zu verwenden, um die Lage sein, die Zyklenzahl zu drucken, wie etwas zu geben:

1:Boot up message 
2-Shutdown message 
3:Boot up message 
4-Shutdown message 
5:Boot up message 
6:Boot up message // reset occurred here 
7-Shutdown message 

Wie kann ich sed/grep (in Cygwin) um nur die aufeinanderfolgenden Boot-Nachrichten zu finden?

+0

awk wäre besser ... 'awk‚{printf NR ":" $ 0} p == $ 0 {printf "// Reset aufgetreten hier"} {p = $ 0 ; printf "\ n"} 'log' – Sundeep

+0

Danke, aber ich benutze Cygwin, da es aus anderen Gründen auf dem Client-System installiert ist, und ich bevorzuge bash/sed/grep als Windows-Lösungen. Leider ist awk nicht installiert. –

Antwort

0

diese Weise können Sie sed:

sed -n 'N;/^\(Boot.*\)\n\1/=' file 

(OR)

sed -n 'N;/^\(Boot.*\)\n\1/p' file 

Dies wird Ausgang eine Zeilennummer, auf dem aufeinanderfolgende Nachrichten.

Test:

$ cat file 
Boot up message 
Shutdown message 
Boot up message 
Shutdown message 
Boot up message 
Boot up message 
Shutdown message 

$ sed -n 'N;/^\(Boot.*\)\n\1/p' file 
Boot up message 
Boot up message 
+0

Vielen Dank, aber es nimmt nur jede andere Doppel-Boot-Nachricht auf. Wenn ich die Zeilennummern mit vor dem Zurücksetzen übereinstimmenden Zeilen hinzufüge, um die Position in der vollständigen Konsolenausgabe zu finden, wird nichts gefunden: –

+0

ie .: 'grep -n -e Boot -e Shutdown console.log | sed -n 'N;/^ \ (Boot. * \) \ n \ 1/=' 'findet nichts (wie erwartet), also habe ich es in' grep -n -e Boot -e Shutdown console.log | geändert sed -n 'N;/^ \ (. * Boot. * \) \ n \ 1/=' 'um die Zeilennummern der ersten greps zu berücksichtigen. Auch wenn ich die Zeilennummern der Konsolenausgabe nicht haben kann, muss ich wegen der fehlenden Resets immer noch große Mengen an Ausgaben für die Zwischen-Resets prüfen. –

+0

@JasonEtherton, Probieren Sie Folgendes aus: 'sed -n 'N; /^.* \ (Boot. * \) \ N. * \ 1/=' Datei ' – sat

Verwandte Themen