![Wie kopiere ich access.log-Zeilen nach Zeit?](https://rvso.com/image/52087/Wie%20kopiere%20ich%20access.log-Zeilen%20nach%20Zeit%3F.png)
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 grep
Befehl ist so konzipiert, dass nur übereinstimmende Zeilen einer bestimmten Datei angezeigt werden. Mit der -C
Option 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
-A
Sie 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 3
ist dies dasselbe wie -A 3 -B 3
.
Wenn mehr als eine übereinstimmende Zeile vorhanden ist, grep
werden 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.