有的时候,我们需要在应用日志中搜索关键词前后的的报错信息,但是由于应用的日志很多,我们只想查询关键词第一次或者最后一次出现的地方的前后几行日志,这是,就可以使用grep和管道命令处理了。
语法:grep [-acinv] [-A/B/C lineNum] [--color=auto] [“keyword”] [fileName]|[head/tail -lineNum]
参数:
-a :将 binary 文件以 text 文件的方式搜寻数据
-c :计算找到 ‘搜寻字符串’ 的次数
-i :忽略大小写的不同,所以大小写视为相同
-n :顺便输出行号
-v :反向选择,亦即显示出没有 ‘搜寻字符串’ 内容的那一行!
-A lineNum:输出匹配字符串后多少行,-A 3后三行
-B lineNum:输出匹配字符串前多少行,-B 2前两行
-C lineNum:输出匹配字符串前后多少行,-C 2前后两行
–color=auto :将找到的关键词部分高亮显示
keyword:关键词,即匹配字符串
fileName:包括文件路径在内的文件名
|:管道命令符,它及其后面的命令可以不用
head/tail:head表示查询关键词首次出现的地方,而tail与之相反。其后的lineNum表示需要打印的行数,语法中前后出现两次lineNum,如果同时出现,依后面的为准。
功能:文本搜索工具,类似于正则表达式搜索,用于在一个大的文件中快速搜索满足一定规则的内容,查到就将关键词以某种颜色高亮显示。
说明:grep是Global Regular Expression Print 的缩写,分析一行的信息,若有关键词出没,就将该行显示出来。该命令通常与管道命令一起使用,用于对一些命令的输出进行筛选加工等等。
例1 取出文件/etc/man.config中包含关键词MANPATH的所有行,记录按照时间升序打印,并把找到的关键字加上颜色高亮显示:
grep --color=auto "MANPATH" /etc/man.config
此种打印方式用于找出包含关键词的所有行。
例2 取出文件/etc/man.config中关键词MANPATH所在行及其后1行的所有行,记录按照时间升序打印:
grep -A2 "MANPATH" /etc/man.config
此种打印方式适用于关键词比较精确、且关键词出现次数比较少的场景。
例3 取出文件/etc/man.config中关键词MANPATH首次出现的前2行:
grep -B10 "MANPATH" /etc/man.config | head -2
我在服务器执行此命令的时候,如果加上 --color=auto,被找到的关键字并未加上颜色。您如果指导怎么处理,请在留言区为楼兰胡杨留言。
例4 在文件/etc/man.config中,查找关键词MANPATH首次出现的后2行记录:
grep -A10 "MANPATH" /etc/man.config | head -2
搜索关键字最后一次出现的位置,并把日志写入另一文件,如果文件存在则覆盖其内容。
语法:grep [-acinv] [-A/B/C n] [--color=auto] [“keyword”] [fileName]|[head/tail -n] > anotherFileName
>
命令表示覆盖写入,如果使用>>
,则表示追加写入。
例5 (搜索关键字最后一次出现位置的前后M行记录,并写入文件newFile.log,如果文件存在则追加
grep -A 10 "MANPATH" /etc/man.config >> newFile.log