不积跬步,无以至千里

Linux-grep


工欲善其事,必先利其器. 随着微服务的愈加完善,日常联调或者排查case的时候,不可避免需要查看各个服务的日志信息.在各个目录间做切换会极大降低工作效率.解决这个问题,只需要对下grep命令有一个更深层次的学习.

先列几个平时使用频率比较高的命令和参数

  1. 基本用法

grep "str" log.log

表示打印log.log中匹配到字符串str的文本行内容

  1. 在指定文件夹下查找指定的字符串
 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  ~ 
  1. 高亮

高亮尤其适合需要查看大量输出日志的情况,通过-color 选项,匹配到的字符串会突出显示为红色

  1. 打印匹配行的相邻文件行

在排查case,查看日志的时候,仅仅查看含有关键字的日志是不够的,需要配合上下文日志来定位,此时-A-B-C选项就派上用场了,其中,grep "str" log.log -A 10 表示同时打印匹配到str的行数和该行之后10行内的内容,-B表示匹配行之前,而-C则表示匹配行前后.此时搭配--color使用,基本足够满足日常所需

  1. 匹配多个字符串

此时需要借助管道来做

grep "abc" log.log|grep "def" --color

  1. 正则匹配

有时候希望查找符合一定规则的字符串,此时可以使用正则表达式

比较下效果

pattern正则表达式主要参数:

  • \: 忽略正则表达式中特殊字符的原有含义。
  • ^:匹配正则表达式的开始行。
  • $: 匹配正则表达式的结束行。
  • \<:从匹配正则表达式的行开始。
  • \>:到匹配正则表达式的行结束。
  • [ ]:单个字符,如[A]即A符合要求 。
  • [ - ]:范围,如[A-Z],即A、B、C一直到Z都符合要求 。
  • :所有的单个字符。
  • *:有字符,长度可以为0。