Mit grep das nächste WORD nach einer Übereinstimmung in jeder Zeile holen

8

Ich möchte die Abfragen " GET " aus meinen Serverprotokollen abrufen.

Dies ist beispielsweise das Serverprotokoll

%Vor%

Wenn ich versuche mit einfachen grep oder awk,

%Vor%

es gibt

aus %Vor%

Ich möchte nur Folgendes anzeigen: Hallo und ss

Gibt es eine Möglichkeit, dies zu tun?

    
aditya.gupta 10.06.2012, 19:40
quelle

6 Antworten

8

Angenommen, Sie haben gnu grep, können Sie Perl-Regex verwenden, um einen positiven Lookbehind zu machen:

%Vor%

Wenn du gnu grep nicht hast, rate ich dir einfach sed zu benutzen:

%Vor%

Wenn du Gnu sed hast (was komisch wäre, wenn du kein gnu grep hast, aber gnu sed hast), kann das sehr vereinfacht werden:

%Vor%

Die Quintessenz hier ist, Sie brauchen sicherlich keine Rohre, um dies zu erreichen. grep oder sed allein wird ausreichen.

    
Tim Pote 10.06.2012, 19:58
quelle
6

Da in diesem Fall die Protokolldatei eine bekannte Struktur aufweist, können Sie cut verwenden Ziehen Sie die 7. Spalte heraus (Felder werden standardmäßig mit Tabs gekennzeichnet).

%Vor%     
John Carter 10.06.2012 19:43
quelle
3

Verwenden Sie eine Pipe, wenn Sie grep verwenden:

%Vor%

[^ /] bedeutet, dass die Buchstaben nach dem ^ -Symbol aus der grep-Ausgabe extrahiert werden

    
Charles Chow 07.03.2014 04:06
quelle
1

Es ist oft einfacher, eine Pipeline als einen einzelnen komplexen regulären Ausdruck zu verwenden. Dies funktioniert mit den von Ihnen bereitgestellten Daten:

%Vor%

Diese Pipeline gibt die folgenden Ergebnisse zurück:

%Vor%

Es gibt sicherlich andere Möglichkeiten, um die Arbeit zu erledigen, aber das funktioniert offenkundig auf dem bereitgestellten Korpus.

    
Todd A. Jacobs 10.06.2012 19:51
quelle
1

Ich habe versucht, dies zu tun und stieß auf diesen Link: Ссылка

Zusammenfassung: Verwenden Sie grep, um übereinstimmende Zeilen zu finden, und verwenden Sie dann awk, um das Muster zu finden und das nächste Feld auszudrucken:

%Vor%

Wenn Sie die einzigartigen Vorkommen kennen möchten:

%Vor%     
ajp619 20.02.2018 19:05
quelle
0
%Vor%

Wenn Sie gawk haben, verwendet der obige Befehl match function, um den gewünschten Wert mit regex auszuwählen und in einem Array a zu speichern.

    
PS. 28.03.2017 09:59
quelle

Tags und Links