Mit grep, um das nächste WORT nach einem Spiel in jeder Linie
Möchte ich, um die "BEKOMMEN" Abfragen aus meiner server-logs.
Dies ist ein Beispiel für den server-log -
1.0.0.127.in-addr.arpa - - [10/Jun/2012 15:32:27] code 404, message File not fo$
1.0.0.127.in-addr.arpa - - [10/Jun/2012 15:32:27] "GET /hello HTTP/1.1" 404 -
1.0.0.127.in-addr.arpa - - [10/Jun/2012 15:41:57] code 404, message File not fo$
1.0.0.127.in-addr.arpa - - [10/Jun/2012 15:41:57] "GET /ss HTTP/1.1" 404 -
Wenn ich versuche mit einfachen grep oder awk,
Adi:~ adi$ awk '/GET/, /HTTP/' serverlogs.txt
gibt es
1.0.0.127.in-addr.arpa - - [10/Jun/2012 15:32:27] "GET /hello HTTP/1.1" 404 -
1.0.0.127.in-addr.arpa - - [10/Jun/2012 15:41:57] "GET /ss HTTP/1.1" 404 -
Ich will nur anzeigen : Hallo und ss
Gibt es eine Möglichkeit dies getan werden könnte?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Vorausgesetzt, Sie haben gnu grep verwenden, können Sie perl style regex zu tun, eine positive lookbehind:
Wenn Sie nicht über gnu grep, dann würde ich raten, nur mit sed:
Wenn Sie gnu sed, das kann stark vereinfacht werden:
Hier die Quintessenz ist, Sie sicherlich nicht brauchen, Rohre, dies zu erreichen.
grep
odersed
allein genügt.In diesem Fall, da die log-Datei hat eine bekannte Struktur, eine Möglichkeit ist die Verwendung
Ausschneiden
zu ziehen, die 7. Spalte (Felder sind gekennzeichnet durch Registerkarten standardmäßig).-d' '
mit cut angeben Leerzeichen als Spaltentrennzeichen.verwenden Sie ein Rohr, wenn Sie mit grep:
[^/] bedeutet, extrahieren Sie die Buchstaben nach dem ^ - symbol aus der grep-Ausgabe
War ich versucht, dies zu tun und kam über diesen link: https://www.unix.com/shell-programming-and-scripting/153101-print-next-word-after-found-pattern.html
Zusammenfassung:
mit grep finden Sie passende Zeilen, dann verwenden awk zu finden, die Muster und drucken Sie mit dem nächsten Feld:
Wenn Sie wissen möchten, das einzigartige vorkommen:
Es ist oft einfacher, verwenden Sie eine pipeline, sondern als eine einzige komplexe reguläre Ausdrücke. Dieser arbeitet auf den Daten, die Sie zur Verfügung gestellt:
Diese pipeline liefert die folgenden Ergebnisse:
Gibt es sicherlich andere Möglichkeiten, um den job zu erledigen, aber diese offenkundig funktioniert, auf den Korpus.
Wenn Sie
gawk
dann obigen Befehl verwendenmatch
Funktion wählen Sie den gewünschten Wert mithilfe von regex und speichern in ein arraya
.