有关如何使用脚本生成过滤器的问题

时间:2010-06-25 10:38:50

标签: linux shell batch-file filter

我正在尝试对脚本进行过滤以实现此目的:

在:

123.125.66.126 - - [05/Apr/2010:09:18:12 -0300] "GET / HTTP/1.1" 302 290
66.249.71.167 - - [05/Apr/2010:09:18:13 -0300] "GET /robots.txt HTTP/1.1" 404 290
66.249.71.167 - - [05/Apr/2010:09:18:13 -0300] "GET /~leonardo_campos/IFBA/Web_Design_Aula_17.pdf HTTP/1.1" 404 324

后:

[05/Apr/2010:09:18:12 -0300] / 302 290
[05/Apr/2010:09:18:13 -0300] /robots.txt 404 290
[05/Apr/2010:09:18:13 -0300] /~leonardo_campos/IFBA/Web_Design_Aula_17.pdf 404 324

如果有人可以提供帮助,那就太棒了......

提前致谢!

4 个答案:

答案 0 :(得分:1)

这似乎是“sed”的完美作品。

您可以轻松构建一对“s”替换模式,以删除不需要的线条。

答案 1 :(得分:1)

sed是你的朋友,有正则表达式。

sed 's/^\(\[.*\]\) "GET \(.*\) .*" \(.*\)$/\1 \2 \3/'

答案 2 :(得分:1)

支持所有HTTP方法:

sed 's#.*\(\[[^]]*\]\).*"[A-Z]* \(.*\) HTTP/[0-9.]*" \(.*\)#\1 \2 \3#'

答案 3 :(得分:1)

如果你的文件结构总是这样,你可以只使用字段。不需要复杂的正则表达式

$ awk '{print $4,$5,$7,$9,$10}' file
[05/Apr/2010:09:18:12 -0300] / 302 290
[05/Apr/2010:09:18:13 -0300] /robots.txt 404 290
[05/Apr/2010:09:18:13 -0300] /~leonardo_campos/IFBA/Web_Design_Aula_17.pdf 404 324