在web服务器运维过程中我们经常会查看日志,有时候我们需要检索出关键日志信息。受服务器环境限制或软件限制(notpad++仅能打开30M左右的日志文件,且检索速度受限于文件大小;EmEditor很好用,打开文件,检索信息也很快,但是需要把文件下载到本地,内网环境会很快但是云环境下受限带宽,大文件下载速度受到影响,不能及时查看问题;服务器上也可使用vim或者cat命令查看,但是不够方便快捷)检索日志不够方便快速。这里记录一下我实际工作中的操作。
【极简快速】
##检索单个文件
grep -rn '需要检索的信息' trace.log
##如果列表下有多个日志文件记录 trace.log、trace.log.1、trace.log.2 等 可使用全文件检索
grep -rn '需要检索的信息' trace.log.*
##统计某条信息出现的次数
grep -c '需要检索的信息' trace.log
##检索匹配到信息的 m表示显示多少行
grep -A m "需要检索的信息" trace.log #显示匹配到关键字之后m行内容
grep -B m "需要检索的信息" trace.log #显示匹配到关键字之前m行内容
grep -C m "需要检索的信息" trace.log #显示匹配到关键字前后m行内容
#或
grep -Am "需要检索的信息" trace.log #显示匹配到关键字之后m行内容
grep -Bm "需要检索的信息" trace.log #显示匹配到关键字之前m行内容
grep -Cm "需要检索的信息" trace.log #显示匹配到关键字前后m行内容
#或
grep -m "需要检索的信息" trace.log #显示匹配到关键字前m行以及后m行内容
##如果需要显示行号 带上参数n 注意此处n一定要放在A前 n表示行号 m表示显示多少行
grep -nA m "需要检索的信息" trace.log #显示匹配到关键字之后m行内容
grep -nB m "需要检索的信息" trace.log #显示匹配到关键字之前m行内容
grep -nC m "需要检索的信息" trace.log #显示匹配到关键字前后m行内容
【进阶体验】
#多条件组合查找
grep -E "keyword1|keyword2" trace.log #同时查找两个关键字
grep -E -A m "keyword1|keyword2" trace.log #显示匹配到的之后m行内容
grep -E -B m "keyword1|keyword2" trace.log #显示匹配到的之前m行内容
grep -E -C m "keyword1|keyword2" trace.log #显示匹配到的前后m行内容
有时候我们查看文件内容时不需要全部内容,只需要查看某些列的内容即可。可以使用awk命令配合grep实现只查看某一列。
grep "keyword" trace.log | awk '{print $2}'
#查看匹配到的内容的第二列 纵向的文件内容 适合查看表格或者其他排列规整的文件
【单独获取关键信息并写入文件】
grep -C 10 'test_a' test.txt > mylog.txt
#将test.txt文件中查找到test_a的前后10行信息输出到文件mylog.txt中
【其他命令】
查看文件前/后m行(m=10)
cat filename | head -n 10 显示文件前面10行
cat filename | tail -n 10 显示文件最后10行
cat filename | head -n 50 | tail -n +10 显示10行到50行 即显示50行之前的10行