grep是查找服务器上的日志时经常使用到的命令。
有时需要找到某段日志,或者确认某段日志是否存在,但是日志中有特殊符号
,就不太好搜索了。
例如下面这段日志:
2022-11-07 15:23:32.070 INFO 30966 --- [cTaskExecutor-2] c.my.MyConsumer : 待处理消息体:: {"newPersonId":"abc123","newPersonStudentInfo":"{\"Message\":\"验证成功\",\"Data\":{\"company_code\":\"A\",\"sub_company_code\":\"A1\",\"num\":\"2\"},\"Success\":true}","status":"1"}
2022-11-07 15:40:46.210 INFO 30966 --- [cTaskExecutor-1] c.my.MyConsumer : 待处理消息体:: {"newPersonId":"abc124","newPersonStudentInfo":"{\"Message\":\"验证成功\",\"Data\":{\"company_code\":\"B\",\"sub_company_code\":\"B2\",\"num\":\"2\"},\"Success\":true}","status":"1"}
需求:
查询日志中包含MyConsumer : 待处理消息体:
并且包含newPersonStudentInfo
并且包含\"company_code\":\"A\"
的日志行。
难点是,目标日志中包含\
与"
这2个特殊符号。
实现方法:
可以用以下grep语句实现。(用单引号括起来,然后用\
转义特殊符号)
grep 'MyConsumer : 待处理消息体:' /home/admin/logs/service.log | grep 'newPersonStudentInfo' | grep '\\\"company_code\\\":\\\"A\\\"'
备注:
如果日志被压缩成了gz
格式的文件,可以用以下grep语句查询。(gzip -dc与grep组合使用)
gzip -dc /home/admin/logs/*.gz | grep 'MyConsumer : 待处理消息体:' | grep 'newPersonStudentInfo' | grep '\\\"company_code\\\":\\\"A\\\"'