CentOS에 거대한 웹 서버 access.log가 있습니다. 원격 VPN을 통해 접속하고 있어서 파일을 복사하거나 직접 읽을 수는 없습니다.
복사하려는 로그의 특정 시간을 알고 있지만 로그의 뒷부분을 텍스트 파일로 복사하기에는 너무 이르고 너무 쉽습니다. 이것이 로그 라인의 모습입니다.
10.255.16.203 - - [26/Mar/2014:16:35:13 +0000]
그래서 내 질문은:찾고 있는 시간 문자열을 알고 있는 경우 매우 큰 로그의 특정 부분을 어떻게 복사합니까?
답변1
이 grep
명령은 주어진 파일과 일치하는 행만 표시하도록 설계되었습니다. 옵션을 사용하면 -C
일치하는 선뿐만 아니라 그 전후의 일부 선도 표시할 수 있습니다.
따라서 원하는 줄 앞뒤에 3줄을 추가하려면 다음을 수행하세요.
$ grep -C 3 "26/Mar/2014:16:35:13 +0000" access.log
-A
또한 및 옵션을 사용하여 일치하는 줄 전후에 표시되는 줄 수를 더 정확하게 조정할 수도 있습니다 -B
. 실제로 -C 3
그것은 동일합니다 -A 3 -B 3
.
일치하는 줄이 여러 개인 경우 grep
일치하는 줄 블록 앞과 뒤의 3줄이 표시됩니다.
예:
$ 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 "-" "-"
에서 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.