我想使用 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”
希望对您有所帮助! :)
