![1](https://linux22.com/image/547840/1.png)
我不是系统管理员,但我经营着一个小网站,今天我收到了警方的传票请求,为了遵守要求,我需要从我们的服务器日志中提取所需的 IP 地址。
这是我的问题:
1
我有 log1.txt
/var/log/lighttpd/access.log.1.gz:84.20.132.141 180.175.44.143 - [28/Apr/2011:09:23:30 -0500] "POST /base/script.php HTTP/1.1" 200 158 "http://ref/,http://ref/" "Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US) AppleWebKit/530.5 (KHTML, like Gecko) Chrome/2.0.172.28 Safari/530.5"
/var/log/lighttpd/access.log.1.gz:85.40.142.111 180.175.44.143 - [28/Apr/2011:09:23:30 -0500] "POST /base/script.php HTTP/1.1" 200 158 "http://ref/,http://ref/" "Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US) AppleWebKit/530.5 (KHTML, like Gecko) Chrome/2.0.172.28 Safari/530.5"
该文件包含 500 多行这样的行
这是我期望的输出:85.40.142.111、84.20.132.141 和其他 IP。
2
我有一个格式完全相同的 log2.txt
我还需要从该日志中输出 IP,例如 85.40.142.111、81.02.32.61,
3
我需要使用 log1 的输出结果并将其与 log2 进行匹配,如果一个 IP 在两个日志中重复,则将其输出。从我提供的示例来看,该 IP 将是 85.40.142.111。
你能帮忙吗?
答案1
我建议使用 cut,而不是 grep:
cut -d\ -f1 log1.txt | sort | uniq > ip1.txt
cut -d\ -f1 log2.txt | sort | uniq > ip2.txt
grep -f ip2.txt ip1.txt
如果您想要的 IP 是每行中的第二个而不是第一个,请将“-f1”替换为“-f2”。
嗨嗨。
答案2
如果你想要的只是一个 IP 地址列表
#!/bin/bash
cut -d ' ' -f1 log1.txt | cut -d ':' -f2 | sort | uniq >log1.out
cut -d ' ' -f1 log2.txt | cut -d ':' -f2 | sort | uniq >log2.out
while read IP
do
sed -n /$IP/p log2.out
done <log1.out