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

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

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

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

处理方式有非常多

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其他的命令的问题)

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

 

 

  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Linux,`find`和`grep`是两个常用的命令,它们有不同的作用。 `find`命令是用来查找文件和目录的命令。它能够在指定的目录下递归查找文件和目录,并按照用户指定的条件进行搜索。`find`命令的搜索条件包括文件名、文件类型、文件大小、文件修改时间等等。`find`命令还能够执行用户指定的操作,例如复制、移动、删除等等。 `grep`命令是用来查找文件符合指定模式的行的命令。它通常和管道符一起使用,例如 `grep pattern filename 在Linux,`find`和`grep`是两个不同的命令,它们主要用途不同。 `find`命令是用来查找文件和目录的命令。它能够在指定的目录下递归查找文件和目录,并按照用户指定的条件进行搜索。`find`命令的搜索条件包括文件名、文件类型、文件大小、文件修改时间等等。`find`命令还能够执行用户指定的操作,例如复制、移动、删除等等。 `grep`命令是用来查找文件符合指定模式的行的命令。它通常和管道符一起使用,例如 `grep pattern filename`。`grep`命令会在指定的文件搜索包含指定模式的行,并输出结果。 因此,`find`和`grep`命令有着不同的用途。`find`命令用于搜索文件和目录,而`grep`命令用于搜索文件的内容。两个命令通常结合使用,例如使用`find`命令查找指定目录下的文件,再使用`grep`命令在找到的文件搜索特定的内容。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值