linux小应用 —— 日志过滤
先说问题,统计一个日志文件中去重之后的ip地址的个数。其实这是一个非常常见也比较简单的问题,其中我个人认为最主要的应该是匹配ip地址是这个问题的核心。剩下的就是对linux命令的熟练程度的问题了。
首先这里我说一下我解决这个问题用到的命令是
下面我们主要介绍grep如何匹配出ip地址
grep作为linux中使用频率非常高的一个命令,和cut命令一样都是管道命令中的一员。并且其功能也是对一行数据进行分析,从分析的数据中取出我们想要的数据。也就是相当于一个检索的功能。当然了,grep的功能要比cut强大的多了。grep检索的条件是多种多样的,甚至还可以和正则表达式合作来检索。这里我们主要就是用它的正则表达式。
其中我们主要用到grep的下面几个选项
-i不区分大小写匹配;-o只显示匹配的字符串-E指定正则表达式
对于Ip地址,取值范围为 0.0.0.0-255.255.255.255。所以说我们可以先匹配 0-255,然后将该正则表达式重复四次即可。
下面先看一下匹配0-255的正则表达式。
(2[0-5]{2}|(1)?(?(\2)[0-9]{2}|([1-9][0-9]|[0-9])))
这里我们分解一下这个正则表达式,首先对于第一位可能是2的情况:200-255。所以可以用正则表达式:2[0-5]{2}。然后是匹配 100-199的情况,那第一位肯定就是判断是否为1了。但是到了这里就要分情况来讨论了一下了,如果是三位的,那就是100-199;如果是两位的话,那就是匹配10-99,如果是一位的话,那就是匹配0-9。所以这里对于第一位1可以是可选择的,然后后面将1是否存在作为条件来判断是否是匹配100-199。所以我们还需要一个条件子组
下面我们看一下正则表达式
((1)?(?(\2)[0-9]{2}|([1-9][0-9]|[0-9])))
如果1被捕获,那条件(?(\2)为真,那么后面就跟着是[0-9]{2};否则(?(\2)为假,就走else-pattern,用一个可选路径([1-9][0-9]|[0-9]) 就可以匹配10-99或者0-9。
所以综合起来就是
(2[0-5]{2}|(1)?(?(\2)[0-9]{2}|([1-9][0-9]|[0-9])))
然后再在前面加上点并重复3次
(\.(2[0-5]{2}|(1)?(?(\2)[0-9]{2}|([1-9][0-9]|[0-9])))){3}
最后连起来整个正则表达式就是
(2[0-5]{2}|(1)?(?(\2)[0-9]{2}|([1-9][0-9]|[0-9])))(\.(2[0-5]{2}|(1)?(?(\2)[0-9]{2}|([1-9][0-9]|[0-9])))){3}
通过grep加上面的正则表达式匹配出所有的ip地址;然后通过uniq命令进行去重;最后再用wc进行统计。整个命令如下
$ grep -ioE '(2[0-5]{2}|(1)?(?(\2)[0-9]{2}|([1-9][0-9]|[0-9])))(\.(2[0-5]{2}|(1)?(?(\2)[0-9]{2}|([1-9][0-9]|[0-9])))){3}' | uniq -c | wc -l
上面这个问题只是grep利用正则表达式的一个应用。也可以有很多的变形问题,比如统计IP地址访问次数之后进行一个排序,找出访问次数前十的ip地址 等等。
正则表达式实际中用途很广,有兴趣的可以点击 正则表达式 查看更详细的教程
linux小应用 —— 日志过滤的更多相关文章
- linux下syslog-ng日志集中管理服务部署记录
syslog是Linux系统默认的日志守护进程,默认的syslog配置文件是/etc/syslog.conf文件.syslog守护进程是可配置的,它允许人们为每一种类型的系统信息精确地指定一个存放地点 ...
- Linux文件系统与日志分析
Linux文件系统与日志分析一.inode与block概述① 文件数据包括元信息(类似文件属性)与实际数据② 文件存储在硬盘上,硬盘最小存储单位是"扇区"(sector),每个扇区 ...
- 深入理解Linux文件系统与日志文件
目录: 一.inode与block 二.inode内容 三.inode的号码 四.inode的大小 五.链接文件 六.inode节点耗尽故障处理 七.恢复EXT类型的文件编译安装extundelete ...
- Linux文件系统与日志分析的了解
Linux文件系统与日志分析 1.inode和block概述 2.模拟inode耗尽实验 3.ext类型文件恢复 4.xfs类型文件恢复 5.日志文件 6.日志分析 1.文件:文件是存储在硬盘上的,硬 ...
- Linux下rsyslog日志收集服务环境部署记录【转】
rsyslog 可以理解为多线程增强版的syslog. 在syslog的基础上扩展了很多其他功能,如数据库支持(MySQL.PostgreSQL.Oracle等).日志内容筛选.定义日志格式模板等.目 ...
- Linux小知识:rm -rf/*会将系统全部删除吗
Linux小知识:rm -rf/*会将系统全部删除吗 本文是学习笔记,视频地址为:https://www.bilibili.com/video/av62839850 执行上面的命令并不会删除所有内容( ...
- Linux小知识:sudo su和su的区别
Linux小知识:sudo su和su的区别 本文是学习笔记,视频地址:https://www.bilibili.com/video/av62836363 su是申请切换root用户,需要申请root ...
- SQL Server 错误日志过滤(ERRORLOG)
一.背景 有一天我发现SQL Server服务器的错误日志中包括非常多关于sa用户的登陆错误信息:“Login failed for user 'sa'. 原因: 评估密码时出错.[客户端: XX.X ...
- Linux系统日志及日志分析
Linux系统日志及日志分析 Linux系统拥有非常灵活和强大的日志功能,可以保存几乎所有的操作记录,并可以从中检索出我们需要的信息. 大部分Linux发行版默认的日志守护进程为 syslog,位 ...
随机推荐
- ROS机器人开发实践1->SSH远程登录要点记录
1.有线网卡 设置 找到有线网络,点击设置,修改其中的IPv4的地址和子网掩码. 1 //地址 2 192.168.xxx.xxx 3 //子网掩码 4 255.255.255.0 点击应用 2.配置 ...
- Codeforces 1322D - Reality Show(DP)
Codeforces 题面传送门 & 洛谷题面传送门 首先这个消消乐的顺着消的过程看起来有点难受,DP 起来有点困难.考虑对其进行一个转化:将所有出场的人按照攻击力从小到大合并,然后每次将两个 ...
- Codeforces 1290F - Making Shapes(数位 dp)
Codeforces 题面传送门 & 洛谷题面传送门 数位 dp 好题. 首先,由于是凸包,一但向量集合确定,凸包的形态肯定就已经确定了.考虑什么样的向量集合能够组成符合条件的凸包,我们假设第 ...
- Codeforces 643F - Bears and Juice(思维题)
Codeforces 题目传送门 & 洛谷题目传送门 首先直接暴力枚举显然是不现实的,我们不妨换个角度来处理这个问题,考虑这 \(R_i\) 个瓶子中每一瓶被哪些熊在哪一天喝过. 我们考虑对这 ...
- 洛谷 P4426 - [HNOI/AHOI2018]毒瘤(虚树+dp)
题面传送门 神仙虚树题. 首先考虑最 trival 的情况:\(m=n-1\),也就是一棵树的情况.这个我相信刚学树形 \(dp\) 的都能够秒掉罢(确信).直接设 \(dp_{i,0/1}\) 在表 ...
- Codeforces 571E - Geometric Progressions(数论+阿巴细节题)
Codeforces 题目传送门 & 洛谷题目传送门 u1s1 感觉此题思维难度不太大,不过大概是细节多得到了精神污染的地步所以才放到 D1E 的罢((( 首先我们对所有 \(a_i,b_i\ ...
- 生物信息Linux用户创建与配额设置
创建一个新用户,并配置使用. create_usr.sh: #/usr/bin/bash user=$1 password="123" useradd ${user} -g met ...
- 用Rsync实现windows下同步linux服务器的数据
一:环境 1.服务端:Red Hat Enterprise Linux Server release 6.4 (Santiago) 2.客户端:windows7旗舰版64位 3.同步对象:测试数据 4 ...
- JuiceFS 数据读写流程详解
对于文件系统而言,其读写的效率对整体的系统性能有决定性的影响,本文我们将通过介绍 JuiceFS 的读写请求处理流程,让大家对 JuiceFS 的特性有更进一步的了解. 写入流程 JuiceFS 对大 ...
- 简单的Mybatis程序
1.新建一个普通Maven项目,导入 mybatis.mysql.junit(用于测试)3个依赖 Mybatis <dependency> <groupId>org.mybat ...