如何修改正则表达式实现grep匹配后插入换行分隔备份日志
实现方法
不需要修改原grep命令的匹配规则,直接通过管道将grep输出流处理即可,推荐用awk实现,逻辑简单无兼容问题,完整命令如下:
grep -A 2 -B 6 "^Errors: [1-9]" INC0108890.txt | awk ' /^--$/ { next } /^Backup Set:/ && NR>1 { print "" } 1 '
逻辑说明
/^--$/ { next }:直接丢弃grep自动生成的--组分隔行,不输出/^Backup Set:/ && NR>1 { print "" }:所有以Backup Set:开头的行,只要不是整个输出的第一行(NR是awk内置行号变量,NR>1表示非首行),就在打印该行前先输出一个空行,自动分隔不同备份记录块。不管两个块是相邻无分隔、还是被grep加了--分隔,都能统一处理- 末尾的
1是awk简写语法,等价于{print},即打印所有当前处理的行
如果习惯用sed,也可以用等效的sed版本:
grep -A 2 -B 6 "^Errors: [1-9]" INC0108890.txt | sed -e '/^--$/d' -e '2,$s/^Backup Set:/\n&/'
sed逻辑和awk完全一致:先删除所有--行,再从第二行开始,给所有Backup Set:开头的行前插入换行符实现空行分隔。
内容的提问来源于stack exchange,提问作者ZimCanIT
相关产品推荐
相关产品推荐

