CentOSには巨大なWebサーバー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.