有的时候,我们需要在应用日志中搜索关键词前后的的报错信息,但是由于应用的日志很多,我们只想查询关键词第一次或者最后一次出现的地方的前后几行日志,这时,就可以使用grep和管道命令处理了。
更多关于Linux命令的传送门——《五分钟扫盲:25个工作中常用的Linux命令》。
常用查询
先提供两个常用查询语句,再分析语法。以文件/etc/man.config为例进行举例。
首次出现位置
取出文件中关键词keyword首次出现的前2行:
grep -A "keyword" /etc/man.config | head -2
最近一次出现位置
在文件中查找关键词keyword最近出现的前2行记录:
grep -B "keyword" /etc/man.config | tail -2
查询关键词所在记录
取出文件/etc/man.config中包含关键词keyword的所有记录:
grep "keyword" /etc/man.config
查询关键词所在位置
语法:grep [-acinv] [-A/B/C lineNum] [--color=auto] [“keyword”] [fileName]|[head/tail -lineNum]
参数:
-a :将 binary 文件以 text 文件的方式搜寻数据
-c :计算找到关键词keyword 的次数
-i :忽略大小写的不同,所以大小写视为相同
-n :顺便输出行号
-v :反向选择,亦即显示出没有keyword内容的那一行!
-A lineNum:A应该是After的意思,输出匹配字符串后多少行,-A3 显示后三行
-B lineNum:B应该是Before的意思,输出匹配字符串前多少行,-B 2 显示前两行
-C lineNum:C应该是Center的意思,输出匹配字符串前后多少行,-C2 显示前后两行
–color=auto :将找到的关键词部分高亮显示
keyword:关键词,即待匹配字符串
fileName:包括文件路径在内的文件名
|:管道命令符,它及其后面的命令可以不用
head/tail:head表示查询关键词首次出现的地方,而tail与之相反。其后的lineNum表示需要打印的行数,语法中前后出现两次lineNum,如果同时出现,依后面的为准。
功能:文本搜索工具,类似于正则表达式搜索,用于在一个大的文件中快速搜索满足一定规则的内容,查到就将关键词以某种颜色高亮显示。
说明:grep是Global Regular Expression Print 的缩写,分析一行的信息,若有关键词出没,就将该行打印出来。该命令通常与管道命令一起使用,用于对一些命令的输出进行筛选加工等等。
例1 取出文件/etc/man.config中包含关键词keyword的所有行,记录按照时间升序打印,并把找到的关键字加上颜色高亮显示:
grep --color=auto "keyword" /etc/man.config
此种打印方式用于找出包含关键词的所有行,关键词高亮显示。
例2 取出文件/etc/man.config中关键词keyword所在行及其后1行的所有行,记录按照时间升序打印:
grep -A2 "keyword" /etc/man.config
此种打印方式适用于关键词比较精确、且关键词出现次数比较少的场景。
例3 取出文件/etc/man.config中关键词keyword首次出现的前2行:
grep -B10 "keyword" /etc/man.config | head -2
例4 在文件/etc/man.config中,查找关键词keyword首次出现的后2行记录:
grep -A10 "keyword" /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 "keyword" /etc/man.config >> newFile.log | tail -2
结束语
欢迎点赞阅读,一同学习交流;若有疑问,请在文章下方留下你的神评妙论!以促使博文高质量。