工欲善其事,必先利其器.
随着微服务的愈加完善,日常联调或者排查case的时候,不可避免需要查看各个服务的日志信息.在各个目录间做切换会极大降低工作效率.解决这个问题,只需要对下grep
命令有一个更深层次的学习.
先列几个平时使用频率比较高的命令和参数
- 基本用法
grep "str" log.log
表示打印log.log中匹配到字符串str
的文本行内容
- 在指定文件夹下查找指定的字符串
caojinyan@bogon ~ grep -nr "工欲善其事,必先利其器" Documents/github/caojinyan24.github.io
Documents/github/caojinyan24.github.io/_posts/2019/201907/2019-07-04-grep.md:9:工欲善其事,必先利其器.
caojinyan@bogon ~
- 高亮
高亮尤其适合需要查看大量输出日志的情况,通过-color
选项,匹配到的字符串会突出显示为红色
- 打印匹配行的相邻文件行
在排查case,查看日志的时候,仅仅查看含有关键字的日志是不够的,需要配合上下文日志来定位,此时-A
-B
-C
选项就派上用场了,其中,grep "str" log.log -A 10
表示同时打印匹配到str的行数和该行之后10行内的内容,-B
表示匹配行之前,而-C
则表示匹配行前后.此时搭配--color
使用,基本足够满足日常所需
- 匹配多个字符串
此时需要借助管道来做
grep "abc" log.log|grep "def" --color
- 正则匹配
有时候希望查找符合一定规则的字符串,此时可以使用正则表达式
比较下效果
pattern正则表达式主要参数:
\
: 忽略正则表达式中特殊字符的原有含义。^
:匹配正则表达式的开始行。$
: 匹配正则表达式的结束行。\<
:从匹配正则表达式的行开始。\>
:到匹配正则表达式的行结束。[ ]
:单个字符,如[A]即A符合要求 。[ - ]
:范围,如[A-Z],即A、B、C一直到Z都符合要求 。。
:所有的单个字符。*
:有字符,长度可以为0。