使用linux过滤apache文件
我正在尝试筛选apache日志文件堆,以排除具有以下内容的所有请求:使用linux过滤apache文件,linux,apache,logging,Linux,Apache,Logging,我正在尝试筛选apache日志文件堆,以排除具有以下内容的所有请求: 模式/static/(这是我想要排除的images/js文件夹) 10.xxx.xxx.xxx(其中x是任意数字-我不希望包含内部请求) 除了“GET/HTTP/1.1”200之外的任何响应-只希望成功 我有一个包含多个.gz文件的文件夹。有没有一种方法可以运行一个linux命令来进行适当的过滤并将结果保存在一个名为apache_log.txt的文件中 我的linux知识非常有限,因此非常感谢您的帮助 对于每个文件*.gz
- 模式
(这是我想要排除的images/js文件夹)/static/
(其中x是任意数字-我不希望包含内部请求)10.xxx.xxx.xxx
- 除了
之外的任何响应-只希望成功“GET/HTTP/1.1”200
我的linux知识非常有限,因此非常感谢您的帮助 对于每个文件*.gz,解压缩并过滤掉不需要的静态和本地文件,过滤掉想要的“GET 200”,并将其附加到结果文件中
for f in *.gz ; do zcat $f | grep -v '/static/' | grep -v '10\.[0-9]\+\.\.[0-9]\+\.[0-9]\+' | grep 'GET / HTTP/1.1" 200' >> apache_log.txt ; done
或者在多行上
for f in *.gz
do
zcat $f \
| grep -v '/static/' \
| grep -v '10\.[0-9]\+\.\.[0-9]\+\.[0-9]\+' \
| grep 'GET / HTTP/1.1" 200' \
>> apache_log.txt
done
谢谢你的快速回复。对于目录中的每个文件(似乎在文件名后附加了一个.Z),我都会遇到此错误。zcat:access_log.2011072803.gz.Z:没有这样的文件或目录忘记了
do
,抱歉:请在*.gz中为f尝试;做ls-l$f;完成
以列出文件。这有效地为我提供了一个列表(不完整)-rwxr-xr-x 1 ChrisPayner staff 463010049 12 Jul 00:01访问日志2011071103.gz-rwxr-xr-x 1 ChrisPayner staff 502073947 12 Aug 10:02访问日志2011071203.gz-rwxr-xr-x 1 ChrisPayner staff 468224970 14 Jul 00:01访问日志2011071303.gz-rwxr-xr-xr-x 1 ChrisPayner staff 464609043 12 Aug 10:02访问日志2011071403.gz-rwxr-xr-xr-x-x 1chrispaynter staff 483168852 16 Jul 00:00 access_log.2011071503.gz因此,for
命令没有理由不与zcat
命令一起工作,而是神奇地将.Z
附加到文件名中。我只是用zmore尝试了相同的命令,结果成功了。我应该提到的是,我使用的是mac电脑,但我不确定这是否会产生影响。我能再请你帮个忙吗?如果我只想输出请求的IP地址,请告诉我要添加什么?