Wie kopiere ich access.log-Zeilen nach Zeit?

Wie kopiere ich access.log-Zeilen nach Zeit?

Ich habe einen riesigen Webserver access.log in CentOS. Ich greife über Remote-VPN darauf zu, daher kann ich die Datei nicht kopieren oder direkt lesen.

Ich kenne die genaue Zeit in den Protokollen, die ich kopieren möchte, aber sie liegt zu weit zurück, um ein Ende des Protokolls einfach in eine Textdatei zu kopieren. So sieht eine Zeile des Protokolls aus.

10.255.16.203 - - [26/Mar/2014:16:35:13 +0000]

Meine Frage ist also:Wie kann ich einen bestimmten Abschnitt eines sehr großen Protokolls kopieren, wenn ich die Zeitzeichenfolgen kenne, die ich suchen möchte?

Antwort1

Der grepBefehl ist so konzipiert, dass nur übereinstimmende Zeilen einer bestimmten Datei angezeigt werden. Mit der -COption ist es möglich, nicht nur die übereinstimmenden Zeilen, sondern auch einige Zeilen davor und danach anzuzeigen.

So erhalten Sie die drei Zeilen vor und nach der gewünschten Zeile:

$ grep -C 3 "26/Mar/2014:16:35:13 +0000" access.log

-ASie können mit den Optionen und auch die Anzahl der nach und/oder vor den entsprechenden Zeilen angezeigten Zeilen genauer einstellen -B. Tatsächlich -C 3ist dies dasselbe wie -A 3 -B 3.

Wenn mehr als eine übereinstimmende Zeile vorhanden ist, grepwerden die drei Zeilen vor und nach dem Block mit den übereinstimmenden Zeilen angezeigt.

Beispiel:

$ grep -C 3 "25/Mar/2014:10:40:59 +0100" access.log
10.0.0.44 - httpuse [25/Mar/2014:09:41:17 +0100] "GET /dummy/BIGDummy_133644_1565_DL.xml.gz HTTP/1.1" 200 507 "-" "-"
10.0.0.43 - httpuse [25/Mar/2014:09:59:51 +0100] "GET /dummy/BIGDummy_133647_48267_DL.xml.gz HTTP/1.1" 200 1677 "-" "-"
10.0.0.44 - httpuse [25/Mar/2014:10:40:42 +0100] "GET /dummy/BIGDummy_133664_39603_DL.xml.gz HTTP/1.1" 200 1677 "-" "-"
10.0.0.40 - httpuse [25/Mar/2014:10:40:59 +0100] "GET /dummy/BIGDummy_133664_DL.xml.gz HTTP/1.1" 200 60142 "-" "-"
10.0.0.41 - httpuse [25/Mar/2014:10:40:59 +0100] "GET /dummy/BIGDummy_133667_23124_DL.xml.gz HTTP/1.1" 200 5202 "-" "-"
10.0.0.40 - httpuse [25/Mar/2014:10:43:09 +0100] "GET /dummy/BIGDummy_133668_46_DL.xml.gz HTTP/1.1" 200 445 "-" "-"
10.0.0.42 - httpuse [25/Mar/2014:10:43:10 +0100] "GET /dummy/BIGDummy_133668_4116_DL.xml.gz HTTP/1.1" 200 597 "-" "-"
10.0.0.40 - httpuse [25/Mar/2014:10:43:13 +0100] "GET /dummy/BIGDummy_133665_DL.xml.gz HTTP/1.1" 200 57902 "-" "-"

Aus man grep:

NAME
   grep, egrep, fgrep - print lines matching a pattern

SYNOPSIS
   grep [options] PATTERN [FILE...]

DESCRIPTION
   Grep  searches  the  named  input  FILEs (or standard input if no files are named,
    or the file name - is given) for lines containing a match to the given PATTERN.
   By default, grep prints the matching lines.

OPTIONS
    -A NUM, --after-context=NUM
            Print  NUM  lines  of  trailing context after matching lines.
            Places a line containing -- between contiguous groups of matches.

    -B NUM, --before-context=NUM
            Print NUM lines of leading context before matching lines.
            Places a line containing --  between  contiguous  groups  of matches.

    -C NUM, --context=NUM
            Print  NUM  lines  of  output  context.
            Places a line containing -- between contiguous groups of matches.

verwandte Informationen