2016-04-06 3 views
0

Kommandozeilen-Tools verwenden, muss ich den Text „HTTP“ extrahieren, (oder was auch immer das Protokoll passiert zu sein), direkt nach dem Stichwort „Erkannt Protokoll“:Wie extrahiert man eine bestimmte Zeile und Spalte einer Datei in Linux?

Teildateiinhalt:

Detected protocol: 
     HTTP 1254 

komplette Dateiinhalt:

nDPI Memory statistics: 
    nDPI Memory (once):  103.29 KB  
    Flow Memory (per flow): 1.91 KB  
    Actual Memory:   1.76 MB  
    Peak Memory:    1.76 MB  

Traffic statistics: 
    Ethernet bytes:  1342   (includes ethernet CRC/IFC/trailer) 
    Discarded bytes:  0    
    IP packets:   10   of 10 packets total 
    IP bytes:    1102   (avg pkt size 110 bytes)   


Detected protocols: 
    HTTP     packets: 10   bytes: 1102   flows: 1    


Protocol statistics: 
    Acceptable     1102 bytes 
+0

verwenden könnte, würde ich schlage vor, multiline 'sed' zu benutzen - siehe [hier] (http://superuser.com/a/634848/438726), oder wenn du mehr Kontrolle brauchst,' awk'. – urban

+0

Was wäre die erwartete Ausgabe dieser Beispieleingabe, die Sie gerade gegeben haben? Versuchen Sie [fragen], hier eine bessere Erfahrung zu haben. – fedorqui

Antwort

0

Angenommen, Sie nur dieses eine Mal passieren wollen, können Sie zum Beispiel sagen:

awk 'matched {print $2; exit} /Detected protocol/ {matched=1}' file 

Welche zurück:

1254 

Dieser prüft eine Zeile "Erkannt Protokoll" enthält. Wenn dies der Fall ist, wird ein Flag gesetzt, das einen Druck in der nächsten Zeile auslöst. Dann wird es beendet.

Sie können auch die Feldtrenn HTTP gesetzt:

awk -F"HTTP" 'f {print $2; exit} /Detected protocol/ {f=1}' file 

, die die folgenden für Ihre aktualisierte Eingabedatei zurückgibt:

    packets: 10   bytes: 1102   flows: 1 
+0

der folgende Fehler aufgetreten ist: awk: cmd. Linie: 1: Übereinstimmung {print $ 2; Beenden}/Erkanntes Protokoll/{Übereinstimmung = 1} awk: cmd. Zeile: 1:^Syntaxfehler awk: cmd. Linie: 1: Übereinstimmung {print $ 2; Beenden}/Erkanntes Protokoll/{Übereinstimmung = 1} awk: cmd. Zeile: 1:^Syntaxfehler – user3728748

+0

@ user3728748 das ist mein Fehler, weil ich 'match' als Variablennamen verwendet habe, während es ein reserviertes Wort ist. Es wurde in "awk" geändert {print $ 2; exit}/Erkanntes Protokoll/{matched = 1} 'Datei'. – fedorqui

0

Sie auch

sed -n '/Dectected protocol/{n;p}' $file 
Verwandte Themen