如何从此日志文件中删除多余的“垃圾”?

如何从此日志文件中删除多余的“垃圾”?

我在 IIS 8.5 的日志文件方面遇到一些问题,我想使用 AWstats 对其进行处理。由于我的 IIS 服务器位于负载平衡器后面,因此我必须添加自定义日志记录字段 X-FORWARDED-FOR。然而,这最终在日志文件中有点混乱:

2015-04-10 11:34:52 20000004f+OriginalIP+66.249.67.21+ HV-WEB-01 [etc]
2015-04-10 11:35:31 20000004f$OriginalIP+127.0.0.1,+136.243.19.46+ HV-WEB-01 [etc]
2015-04-10 11:35:31 20000004f$OriginalIP+127.0.0.1,+136.243.19.46+ HV-WEB-01  [etc]
2015-04-10 21:05:38 20000004f%OriginalIP+10.10.1.7,+89.221.243.229+ HV-WEB-01 [etc]
2015-04-10 21:05:38 20000004f%OriginalIP+10.10.1.7,+89.221.243.229+ HV-WEB-01 [etc]
2015-04-10 21:06:49 20000004f+OriginalIP+2.150.2.19+ HV-WEB-01 [etc]

我现在无法找到负载平衡器的家伙/女孩,所以现在我想通过执行搜索/替换来快速/肮脏地修复它,这将所有这些“20000000f+OriginalIP+10.20.30.40+”条目“10.20.30.40”。

更新:显然有比我最初想象的更多的变化......

答案1

这会处理除尾随之外的所有内容+

sed 's/ [^+ ]*+*\([0-9.]*\)[,+]*/ \1 /2' <<\IN
2015-04-10 11:35:31 20000004f$OriginalIP+127.0.0.1,+136.243.19.46+ HV-WEB-01 [etc]
2015-04-10 11:35:31 20000004f$OriginalIP+127.0.0.1,+136.243.19.46+ HV-WEB-01  [etc]
2015-04-10 21:05:38 20000004f%OriginalIP+10.10.1.7,+89.221.243.229+ HV-WEB-01 [etc]
2015-04-10 21:05:38 20000004f%OriginalIP+10.10.1.7,+89.221.243.229+ HV-WEB-01 [etc]
IN

它打印...

2015-04-10 11:35:31 127.0.0.1 136.243.19.46+ HV-WEB-01 [etc]
2015-04-10 11:35:31 127.0.0.1 136.243.19.46+ HV-WEB-01  [etc]
2015-04-10 21:05:38 10.10.1.7 89.221.243.229+ HV-WEB-01 [etc]
2015-04-10 21:05:38 10.10.1.7 89.221.243.229+ HV-WEB-01 [etc]

这是因为这些字段在我想用作分隔符的字符上串在一起。老实说,这有点令人沮丧。但很容易修复:

sed 's/ [^+ ]*+*\([0-9.]*\)[,+]*/ \1 /2;s/+ / /' <infile

答案2

sed 's/20000000f+OriginalIP+\([0-9.]*\)+/\1/' <yourlog >newlog

假设这yourlog是您要修改的日志。修改后的日志将存储在newlog.

相关内容