linux下根据字符串匹配文件内容来查找文件

2020-11-19 14:34:38 浏览数 (1)

前言: 在这家公司比较少接触到linux, 内网测试都是部署在windows上. 近期部署了外网linux上, 测试在线上遇到的一些bug需要解决, 一时间忘记了一些命令, 于是打算补一补, 用到了就记一记

这篇记录的是grep命令

通常用到比较多的地方就是用来过滤输出, 如

代码语言:javascript复制
//查看进程时进行过滤
ps -ef | grep xxx

好像就这样...

现在用它来匹配文件内容

实例操作

首先 待查找的文件如下

代码语言:javascript复制
[cailinfan@game1 common]$ ls
common.log                common.log.2020.11.03.22  common.log.2020.11.04.10  common.log.2020.11.04.16  common.log.2020.11.04.22  common.log.2020.11.05.11  common.log.2020.11.05.17  common.log.2020.11.06.00  common.log.2020.11.06.13
common.log.2020.11.03.17  common.log.2020.11.03.23  common.log.2020.11.04.11  common.log.2020.11.04.17  common.log.2020.11.04.23  common.log.2020.11.05.12  common.log.2020.11.05.18  common.log.2020.11.06.04  common.log.2020.11.06.14
common.log.2020.11.03.18  common.log.2020.11.04.01  common.log.2020.11.04.12  common.log.2020.11.04.18  common.log.2020.11.05.01  common.log.2020.11.05.13  common.log.2020.11.05.19  common.log.2020.11.06.09  common.log.2020.11.06.15
common.log.2020.11.03.19  common.log.2020.11.04.02  common.log.2020.11.04.13  common.log.2020.11.04.19  common.log.2020.11.05.04  common.log.2020.11.05.14  common.log.2020.11.05.20  common.log.2020.11.06.10  common.log.2020.11.06.16
common.log.2020.11.03.20  common.log.2020.11.04.04  common.log.2020.11.04.14  common.log.2020.11.04.20  common.log.2020.11.05.09  common.log.2020.11.05.15  common.log.2020.11.05.21  common.log.2020.11.06.11
common.log.2020.11.03.21  common.log.2020.11.04.09  common.log.2020.11.04.15  common.log.2020.11.04.21  common.log.2020.11.05.10  common.log.2020.11.05.16  common.log.2020.11.05.22  common.log.2020.11.06.12

当然是以xxx.log.yyyy.mm.dd.HH这种格式命名的了

场景1: 在日志文件中查找出现过改字符串的文件

代码语言:javascript复制
[cailinfan@game1 common]$ grep -l "1043846373394350080" common.log.2020.11.05.*
common.log.2020.11.05.13
common.log.2020.11.05.14
common.log.2020.11.05.16
common.log.2020.11.05.18
common.log.2020.11.05.19
[cailinfan@game1 common]$

场景2: 打印出在该文件内容中中出现的次数

代码语言:javascript复制
[cailinfan@game1 common]$ grep -c "1043846373394350080" common.log.2020.11.05.*
common.log.2020.11.05.01:0
common.log.2020.11.05.04:0
common.log.2020.11.05.09:0
common.log.2020.11.05.10:0
common.log.2020.11.05.11:0
common.log.2020.11.05.12:0
common.log.2020.11.05.13:15
common.log.2020.11.05.14:13
common.log.2020.11.05.15:0
common.log.2020.11.05.16:14
common.log.2020.11.05.17:0
common.log.2020.11.05.18:25
common.log.2020.11.05.19:171
common.log.2020.11.05.20:0
common.log.2020.11.05.21:0
common.log.2020.11.05.22:0
[cailinfan@game1 common]$

场景3: 单独在一个文件中出现的行数

代码语言:javascript复制
[cailinfan@game1 common]$ grep -n "1043846373394350080" common.log.2020.11.05.18
784:2020-11-05 18:30:08,022 [work-1-4] INFO  (LoginModule.java:237) - 玩家:1043846373394350080,登录并且数据加载完毕
816:2020-11-05 18:31:07,897 [epollEventLoopGroup-9-3] INFO  (GameServerHandler.java:57) - 95db87f8#1043846373394350080# closed cause by IDLE_TIME_OUT
817:2020-11-05 18:31:07,921 [work-1-4] INFO  (GameUser.java:86) - 1043846373394350080开始unload....1
1088:2020-11-05 18:59:34,475 [work-1-3] INFO  (CardPondModule.java:250) - 用户:1043846373394350080,高级卡池抽卡十次
...
[cailinfan@game1 common]$

场景4: 匹配即出现a又有b的字符串的文本行信息

代码语言:javascript复制
[cailinfan@game1 interface]$ grep -n "1043846373394350080" interface.log.2020.11.05.14 | grep "SCHeroLvUp"
4449:2020-11-05 14:29:50,822 INFO (SCMessage.java:39) - 479a7b76#1043846373394350080#SCHeroLvUp#{"guid":1043847521794785280}
5173:2020-11-05 14:32:33,072 INFO (SCMessage.java:39) - 479a7b76#1043846373394350080#SCHeroLvUp#{"guid":1043847521794785280}
5235:2020-11-05 14:32:38,872 INFO (SCMessage.java:39) - 479a7b76#1043846373394350080#SCHeroLvUp#{"guid":1043847521794785280}
5285:2020-11-05 14:32:43,872 INFO (SCMessage.java:39) - 479a7b76#1043846373394350080#SCHeroLvUp#{"guid":1043847521794785280}
[cailinfan@game1 interface]$

ojbk

大致就这样

详情自己去使用命令man grep或者grep --help查看参数的使用


首发来自公众号: 程序员品首发来自公众号: 程序员品

0 人点赞