使用正则表达式过滤apache日志文件

时间:2010-09-20 14:37:15

标签: regex apache sed cmd

我有一个很大的apache日志文件,我需要对其进行过滤并仅保留(在新文件中)来自某个IP的日志:192.168.1.102

我尝试使用此命令:

sed -e "/^192.168.1.102/d" < input.txt > output.txt

但是“/ d”会删除这些条目,我需要离开它们。

感谢。

3 个答案:

答案 0 :(得分:2)

如何使用grep

cat input.txt | grep -e "^192.168.1.102" > output.txt

编辑:如下面的评论中所述,为了使其正确,必须转义正则表达式中的点。正则表达式中的转义是使用反斜杠完成的:

cat input.txt | grep -e "^192\.168\.1\.102" > output.txt

答案 1 :(得分:2)

sed -n 's/^192\.168\.1\.102/&/p'

sed比我机器上的grep更快

答案 2 :(得分:0)

我认为使用grep是最好的解决方案,但是如果你想使用sed,你可以这样做:

sed -e '/^192\.168\.1\.102/b' -e 'd'

如果正则表达式匹配,则b命令将跳过所有后续命令,因此d命令将删除正则表达式不匹配的行。