免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 4063 | 回复: 15

[文本处理] 【已解决】如何从日志中取位置和数量不定的IP [复制链接]

论坛徽章:
2
IT运维版块每日发帖之星
日期:2016-07-23 06:20:00数据库技术版块每日发帖之星
日期:2016-07-29 06:20:00
发表于 2017-04-26 16:55 |显示全部楼层
本帖最后由 zhaiyuzhen 于 2017-04-27 10:44 编辑

日志如下:
[26/Apr/2017:15:45:11 +0800] 138.197.149.139 Mozilla/5.0 (Macintosh; Intel Mac OS X 10.11; rv:47.0) Gecko/20100101 Firefox/47.0 -  200 4
[26/Apr/2017:15:45:12 +0800] 212.235.78.32, 113.219.188.225,138.68.251.63 Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.97 Safari/537.11 -  200 3674
[26/Apr/2017:15:45:15 +0800] 188.166.191.205 Mozilla/5.0 (X11; Ubuntu; Linux i686 on x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/44.0.2438.22 Safari/537.36 -  200 3
[26/Apr/2017:15:45:24 +0800] 32.168.23.134, 113.219.188.225,178.245.155.23 Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.97 Safari/537.11 -  200 336
[26/Apr/2017:15:45:03 +0800] 212.235.78.32, 113.219.188.225,138.68.251.63 Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.97 Safari/537.11 -  200 56
213.129.3.226, 113.219.188.225,190.181.128.34 - - [26/Apr/2017:15:43:59 +0800] "POST /XXX/XXXX HTTP/1.1" 200 74028
253.89.193.65, 113.219.188.225,221.204.101.66 - - [26/Apr/2017:15:44:19 +0800] "POST /XXX/XXXX HTTP/1.1" 200 74027
211.94.43.117,58.49.186.180 - - [26/Apr/2017:15:44:19 +0800] "POST /XXX/XXXX HTTP/1.0" 200 73945
129.201.18.163,113.219.188.225,221.229.173.148 - - [26/Apr/2017:15:44:22 +0800] "POST /XXX/XXXX HTTP/1.0" 200 73944
168.193.173.30,113.229.71.10 - - [26/Apr/2017:15:44:22 +0800] "POST /XXX/XXXX HTTP/1.0" 200 73941

如果日志中有多个IP,分别取得每个IP(重复的不要);如果只有一个IP则不做操作。期望得到类似如下的结果:
212.235.78.32
113.219.188.225
138.68.251.63
32.168.23.134
178.245.155.23
213.129.3.226
190.181.128.34
253.89.193.65
221.204.101.66
211.94.43.117
58.49.186.180
129.201.18.163
221.229.173.148
168.193.173.30
113.229.71.10

论坛徽章:
39
双子座
日期:2014-08-06 17:37:19极客徽章
日期:2016-12-07 14:03:402017金鸡报晓
日期:2017-01-10 15:13:292017金鸡报晓
日期:2017-02-08 10:39:4215-16赛季CBA联赛之新疆
日期:2017-03-24 16:36:1915-16赛季CBA联赛之江苏
日期:2017-04-26 17:19:08黑曼巴
日期:2018-03-07 18:56:5615-16赛季CBA联赛之八一
日期:2018-03-09 10:44:1015-16赛季CBA联赛之江苏
日期:2018-03-12 15:12:1915-16赛季CBA联赛之青岛
日期:2018-03-16 09:13:0515-16赛季CBA联赛之山东
日期:2018-04-27 18:23:0515-16赛季CBA联赛之新疆
日期:2018-05-04 11:29:30
发表于 2017-04-26 17:14 |显示全部楼层
本帖最后由 o枫叶o飘零 于 2017-04-26 17:19 编辑
  1. grep -oP '(\d+\.){3}\d+' filename|awk '{a[$0]++}END{for(i in a)if (a[i]>=2)print i}'
复制代码



话说  你贴的结果没有错麽?  这2个结果   以哪个为准?
138.197.149.139  
113.229.71.10

论坛徽章:
33
ChinaUnix元老
日期:2015-02-02 08:55:39CU十四周年纪念徽章
日期:2019-08-20 08:30:3720周年集字徽章-周	
日期:2020-10-28 14:13:3020周年集字徽章-20	
日期:2020-10-28 14:04:3019周年集字徽章-CU
日期:2019-09-08 23:26:2519周年集字徽章-19
日期:2019-08-27 13:31:262016科比退役纪念章
日期:2022-04-24 14:33:24
发表于 2017-04-26 17:14 |显示全部楼层
  1. grep -Po '(((\d{1,2})|(1\d{2})|(2[0-4]\d)|(25[0-5]))\.){3}((\d{1,2})|(1\d{2})|(2[0-4]\d)|(25[0-5]))' 1.log | sort -u
复制代码

论坛徽章:
54
2015亚冠之德黑兰石油
日期:2015-07-07 13:00:1615-16赛季CBA联赛之深圳
日期:2016-03-31 09:03:5415-16赛季CBA联赛之辽宁
日期:2016-05-09 20:38:15程序设计版块每日发帖之星
日期:2016-05-12 06:20:0015-16赛季CBA联赛之四川
日期:2016-05-13 15:19:4715-16赛季CBA联赛之福建
日期:2016-05-15 20:24:34每日论坛发贴之星
日期:2016-05-16 06:20:0015-16赛季CBA联赛之吉林
日期:2016-05-26 11:49:4715-16赛季CBA联赛之广东
日期:2016-05-26 13:49:18极客徽章
日期:2016-12-07 14:05:2315-16赛季CBA联赛之广夏
日期:2016-12-20 17:33:532017金鸡报晓
日期:2017-01-10 15:19:56
发表于 2017-04-26 17:18 |显示全部楼层
  1. awk -vFPAT='([0-9]{1,3}\\.){3}[0-9]{1,3}' 'NF>1{for(i=1;i<=NF;i++)a[$i]}END{for(i in a)print i}'
复制代码

论坛徽章:
2
IT运维版块每日发帖之星
日期:2016-07-23 06:20:00数据库技术版块每日发帖之星
日期:2016-07-29 06:20:00
发表于 2017-04-27 10:00 |显示全部楼层
经过测试,版主Shell_HAT大神最符合我的需求,只是末位是3位数字的话只能取到两位,比如113.219.188.225,取到的是113.219.188.22。感谢大神的思路,我再修改一下,送上小小的红包略表谢意。

论坛徽章:
33
ChinaUnix元老
日期:2015-02-02 08:55:39CU十四周年纪念徽章
日期:2019-08-20 08:30:3720周年集字徽章-周	
日期:2020-10-28 14:13:3020周年集字徽章-20	
日期:2020-10-28 14:04:3019周年集字徽章-CU
日期:2019-09-08 23:26:2519周年集字徽章-19
日期:2019-08-27 13:31:262016科比退役纪念章
日期:2022-04-24 14:33:24
发表于 2017-04-27 11:20 |显示全部楼层
回复 5# zhaiyuzhen


  1. grep -Pow '(((\d{1,2})|(1\d{2})|(2[0-4]\d)|(25[0-5]))\.){3}((\d{1,2})|(1\d{2})|(2[0-4]\d)|(25[0-5]))' 1.log | sort -u
复制代码

论坛徽章:
2
IT运维版块每日发帖之星
日期:2016-07-23 06:20:00数据库技术版块每日发帖之星
日期:2016-07-29 06:20:00
发表于 2017-04-27 11:40 |显示全部楼层
回复 6# Shell_HAT

突然发现一个严重的错误:一条日志中仅有一个IP的话则不进行操作,也就是这个IP不在结果中出现,大神提供的表达式把所有的IP都摘抄出来了。。。。

论坛徽章:
33
ChinaUnix元老
日期:2015-02-02 08:55:39CU十四周年纪念徽章
日期:2019-08-20 08:30:3720周年集字徽章-周	
日期:2020-10-28 14:13:3020周年集字徽章-20	
日期:2020-10-28 14:04:3019周年集字徽章-CU
日期:2019-09-08 23:26:2519周年集字徽章-19
日期:2019-08-27 13:31:262016科比退役纪念章
日期:2022-04-24 14:33:24
发表于 2017-04-27 12:40 |显示全部楼层
回复 7# zhaiyuzhen


  1. #!/bin/bash
  2. IP_NUM=1
  3. IP_LIST=$(grep -Pow '(((\d{1,2})|(1\d{2})|(2[0-4]\d)|(25[0-5]))\.){3}((\d{1,2})|(1\d{2})|(2[0-4]\d)|(25[0-5]))' 1.log | sort -u)
  4. IP_NUM=$(echo "$IP_LIST" | wc -l)
  5. if [[ $IP_NUM != 1 ]]; then
  6.     echo "$IP_LIST"
  7. fi
复制代码

论坛徽章:
2
IT运维版块每日发帖之星
日期:2016-07-23 06:20:00数据库技术版块每日发帖之星
日期:2016-07-29 06:20:00
发表于 2017-04-27 13:02 |显示全部楼层
回复 8# Shell_HAT
因为 IP_LIST是一个集合,IP_NUM肯定大于1,所以条件语句永为真。可能是我没说清楚:[26/Apr/2017:15:45:11 +0800] 138.197.149.139 Mozilla/5.0 (Macintosh; Intel Mac OS X 10.11; rv:47.0) Gecko/20100101 Firefox/47.0 -  200 4
这条日志只有一个IP(138.197.149.139),所以不做操作;

[26/Apr/2017:15:45:12 +0800] 212.235.78.32, 113.219.188.225,138.68.251.63 Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.97 Safari/537.11 -  200 3674
这条语句有多个IP(212.235.78.32, 113.219.188.225,138.68.251.63),所以要把这条语句中的所有IP都摘出来。

发现多个IP之间有个逗号,所以就先用逗号过滤一下,然后再提取IP,有点取巧。
grep "," 11.txt |grep -Pow '(((\d{1,2})|(1\d{2})|(2[0-4]\d)|(25[0-5]))\.){3}((\d{1,2})|(1\d{2})|(2[0-4]\d)|(25[0-5]))'|sort -u



这个可以实现我想要的结果。

论坛徽章:
0
发表于 2017-04-27 15:54 |显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP