【Linux】linux中grep(过滤运行日志)和find的正则用法

本文介绍如何使用Linux命令行工具grep和find进行日志分析,包括正则表达式的应用,如筛选特定行、忽略大小写、反选及查找符合特定模式的文件。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

本人菜鸡一只,对于正则其实真是菜的抠脚!所以得赶紧记下来,不然下次又忘了!!

遇到了个场景,程序的运行日志中,有部分信息我们是想要的,需要进行一些基础的分析。

日志拿到手上,里面可能有上万条日志,但是我们只需要其中一部分。

处理方式有非常多

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

4、另外我在说下find命令的一些东西

find命令的一些具体的用法,我就不说了,一般这个是在有些文件我们实在找不到的时候才去使用的

-1.find正常用法

find 在哪个目录中查找 拼接一些参数-name,-type,-size,-mtime... 加上匹配的内容

具体我就不展开了,因为毕竟简单网上也很多可以找到的,

例如:https://blog.51cto.com/13869554/2151557(作者:fengchen51)

这里主要说说find怎么使用正则来匹配查找的文件

-2.-name是不能写正则来查找文件的!

因此如果要实现根据正则,查询文件夹下的文件,就需要使用  -regex  ,也可以指定通过  -regextype 指定支持的正则类型

type: 如果不使用选项 -regextype "type", 则默认的正则表达式类型是emacs,使用该选项的话,type 类型包括 posix-awk, posix-basic, posix-egrep 和 posix-extended 四种,具体区别其实我也不太懂,正则确实在不同环境下会有细微的区别,大家使用前多测试下就好了

下面来说一个实例:

我想要查某个文件夹下修改时间一天以内,以abc为开头,以tar.gz或者zip结尾的文件,并且查询出来排个序,因此如下

find 目标路径 -regextype posix-extended -regex ".*?abc.*(zip|tar.gz)$" -mtime -1 | sort

!!注意:这里使用正则千万要注意!
find命令查询出来是全路径+文件名,所以正则匹配的时候要从路径开始匹配

比如你查当前目录的,匹配出来的文件是:

./abcxxxxxx.zip

./abcxxxxxx.zip

这时候如果你正则写的是abc开头,那这个数据你就永远都匹配不到!!因为数据是./开头的!!

所以查询的时候跟你输入的目标路径也是有关系的,请大家注意!!!!

 

这里还是要提一句,不管什么需求,都要尽量用最简单的方式来做(不要搭上一大堆框架,因为东西多了,不好开发,也不好维护,出了问题,也要一个框架一个框架查,很麻烦!!!!)

好了,所以很短的文章,记录很简单的问题!(这篇文章说不定会更新,记录下linux其他的命令的问题)

我是菜鸡,下次再见,拜拜~~!

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值