如何使用Shell脚本删除日志文件中两段指定区间的内容?
解决方案
可以使用sed命令实现批量删除指定文本块的需求,它擅长处理多行文本的范围匹配与删除操作。针对你的日志格式,执行以下命令即可完成两个清理任务:
sed -e '/^ ---Successful backups---$/,/^ ---Failed backups---$/d' \ -e '/^ ---Unresolved clients---$/,/^---Summary notification report---$/d' log.out > cleaned_log.out
命令解释
- 第一个规则
/^ ---Successful backups---$/,/^ ---Failed backups---$/d:
匹配以8个空格开头、后跟---Successful backups---的行,到以8个空格开头、后跟---Failed backups---的行,将这个范围内的所有行删除。 - 第二个规则
/^ ---Unresolved clients---$/,/^---Summary notification report---$/d:
匹配以8个空格开头、后跟---Unresolved clients---的行,到以---Summary notification report---开头的行,删除该范围内的所有行。 > cleaned_log.out:将处理后的结果保存到新文件cleaned_log.out中,避免直接修改原日志文件。
验证效果
处理后的日志内容将变为:
---Summary notification report--- Policy name:xyz Workflow name:abc1, Workflow status:succeeded, Workflow start time:08/01/23 14:30:00, Duration:0 hours 0 minutes 33 seconds Action name:backup, Action status:succeeded, Action start time:08/01/23 14:30:00, Duration:0 hours 0 minutes 33 seconds --- Traditional Backup Action report --- Policy name:xyz Workflow name:abc1 Action name:backup Action status:succeeded Action start time:08/01/23 14:35:00 Action duration:0 hours 0 minutes 30 seconds Total 1 client(s), 0 Succeeded with warning(s), 1 Succeeded, 0 Failed, 0 Unresolved.
内容的提问来源于stack exchange,提问作者Swapnil Dagar
相关产品推荐
相关产品推荐

