需求示例:输出日志文件中某一时间段的日志,比如过去某天或某几天的日志,可以日期开始、结束时间作为关键字,获取两者中间的那段日志。
输出文件内容中指定两个关键字之间的内容
sed -n '1,/AAA/!p' filename |sed -n '1,/BBB/p'
输出文件filename内容中从关键字AAA到BBB之间的内容,可用于获取日志文件中两个时间段之间的文件内容
-n 按行输出,与p结合使用
!p 取反输出
上述方法的grep实现方式:
grep -A -1000 AAA filename|grep -B -1000 BBB
-1000,行数,根据文件实际情况,可以简单粗暴的设一个极大值即可。
需求示例:获取数据库binlog日志中某些sql语句及执行时间,因执行时间在语句之前的两三行,所以需要输出匹配sql语句及之前部分,结合grep -v 筛选掉部分干扰日志,可以干脆利索的获得想要的日志
grep -A 5 foo file 显示foo及后5行
grep -B 5 foo file 显示foo及前5行
grep -C 5 foo file 显示file文件里匹配foo字串那行以及上下5行
实践应用:grep -B 3 "update t_business set " cdb_bin_mysqlbin.000004.sql |grep -v "SET T"|grep -B 3 "delete_status=1,"|grep -v "\-\-" |grep -v "# at "|grep -v "use \`xx_db" >111