Skip to main content
 首页 » 编程设计

python之处理日志以修复格式错误的 IP 地址 ...x

2025年05月04日14xiaohuochai

我想使用 shell 脚本将日志文件每一行的第一个字符“x”替换为数字“7”。日志文件示例:

216.129.119.x [01/Mar/2010:00:25:20 +0100] "GET /etc/.... 
74.131.77.x [01/Mar/2010:00:25:37 +0100] "GET /etc/.... 
222.168.17.x [01/Mar/2010:00:27:10 +0100] "GET /etc/.... 

我卑微的开始......

#!/bin/bash 
echo Starting script... 
cd /Users/me/logs/ 
gzip -d /Users/me/logs/access.log.gz 
echo Files unzipped... 
echo I'm totally lost here to process the log file and save it back to hd... 
 
exit 0 

为什么日志文件IP格式是这样的?我的网络提供商 (1and1) 已决定不存储 IP 地址,因此他们已将最后一个数字替换为字符“x”。他们告诉我这是“法律”的新要求。我个人认为这是废话,但这会使我们偏离主题。

我想用 AWstats 处理这些日志文件,所以我需要一个格式正确的 IP 地址。我想将 x 替换为 7,如下所示:

216.129.119.7 [01/Mar/2010:00:25:20 +0100] "GET /etc/.... 
74.131.77.7 [01/Mar/2010:00:25:37 +0100] "GET /etc/.... 
222.168.17.7 [01/Mar/2010:00:27:10 +0100] "GET /etc/.... 

我知道不完美,但至少我可以处理文件,我仍然可以获得很多有用的信息,如国家/地区、访问者数量等。日志文件每个 200MB,所以我认为 shell 脚本是要走的路,因为我可以在本地的 Macbook Pro 上快速完成。不幸的是,我对 shell 脚本知之甚少,这次我的 javascript 技能也无济于事。感谢您的帮助。

请您参考如下方法:

既然每个人都在发布他们的替代解决方案,我将发布一个我认为非常简单的解决方案:

sed s/\.x/\.7/ input_file > output_file 

用“.7”替换任何字符串“.x”

希望对您有所帮助! :)