本人菜鸡一只,对于正则其实真是菜的抠脚!所以得赶紧记下来,不然下次又忘了!!
遇到了个场景,程序的运行日志中,有部分信息我们是想要的,需要进行一些基础的分析。
日志拿到手上,里面可能有上万条日志,但是我们只需要其中一部分。
处理方式有非常多
1、通过各种语言io流读取日志,判断读入的行中是否包含某些字段是我们需要的
2、把日志加载到某些“容器”中,比如数据库啊,es啊等等的,然后通过对应的语法,filter出我们想要的行!
但是,说实话,如果能不做任何处理(一般服务是部署在linux上,所以运行日志也是在linux上的),直接通过linux命令行来处理是最方便的
3、linux命令行,来过滤我们想要的日志
所以选择使用grep命令
所以我先说grep命令几个比较常用的参数
参数 | 注释 | 用法 |
--color | 匹配到的数据变红 | grep --color '要匹配的行的特征' |
-A | 查看后几行数据 | 查看匹配的行的后十行:grep -A 10 '要匹配的行的特征' |
-B | 查看前几行数据 | 用法和-A一样 |
-i | 无视大小写 | grep -i '要匹配的行的特征' |
-v | 反选,不保留匹配到的数据 | grep -v '要匹配的行的特征' |
其实grep是可以使用正则的匹配的,但是他当中的所有特殊符号都需要转义!!!
看看一下的具体例子:
#查看日志中,包含“表名:”或者“包含SQL:”的行!
cat 2019-02-22.log | grep "^\(表名:\|SQL:\).*$"
#查看日志中,包含“表名:”或者“包含SQL:”的行!,但是还需要过滤掉select语句
cat 2019-02-22.log | grep "^\(表名:\|SQL:\).*$" | grep -v -i 'select'
#查看日志中,将这部分日志追加到某个文件中
#如果是覆盖,就使用 ">"
cat 2019-02-22.log | grep "^\(表名:\|SQL:\).*$" | grep -v -i 'select' >> 20190222.log
这里还是要提一句,不管什么需求,都要尽量用最简单的方式来做(不要搭上一大堆框架,因为东西多了,不好开发,也不好维护,出了问题,也要一个框架一个框架查,很麻烦!!!!)
好了,所以很短的文章,记录很简单的问题!(这篇文章说不定会更新,记录下linux其他的命令的问题)