bash - 从 tail -f 只打印花括号之间的行
问题描述
我有一个脚本,它读取多个调试日志,将其附加到临时文件,然后tail -f
对调试文件执行操作,以便我们可以在单个窗口中监视调试事件并轻松查看用户操作何时引发事件。还有一堆元数据也写入了这些调试日志,我不想将它们包含在监控脚本的输出中。
有没有一种方法可以使用sed
或awk
仅打印大括号(包括大括号)中包含的数据?大括号内的数据可以而且总是跨越多行。
数据可能如下所示:
DON'T PRINT THIS DATA:!@#%$%^
DON'T "!@#()*& PRINT THIS DATA EITHER
}
DON"T PRINT THIS
{
PRINT THIS DATA BLOCK
AND THIS DATA
AND THIS LINE TOO:!@#(*&
}
DONT:!@# \/PRINT THIS
{
BUT PRINT THIS
}
解决方案
使用多个 sed
sed -n '/{/,/}/p' InputFile | sed '/^{/d' | sed '/^}/d'
使用单 sed
sed -n '/{/,/}/{/{/!{/}/!p}}' InputFile
推荐阅读
- swift - 使用 NSPersistentCloudKitContainer 的可选核心数据关系问题
- protocol-buffers - 对 gRPC 消息建模的最佳方法
- ruby-on-rails - Rail6 db:migrate 失败 - 参数数量错误(给定 1,预期 0)
- sql - 为什么 select with subselect 在条件下不返回任何行的速度要慢得多?
- spring - 在spring boot中使用pageable获取和删除对象
- php - 页脚没有取代它的位置
- java - SAP Hybris 无法创建自定义横幅组件
- c# - JSON 中的动态键
- java - 从 PDF 剥离器转置矩阵
- perl - Perl grep 通过大文件匹配字符串