首页 > 解决方案 > 从 tail -f 只打印花括号之间的行

问题描述

我有一个脚本,它读取多个调试日志,将其附加到临时文件,然后tail -f对调试文件执行操作,以便我们可以在单个窗口中监视调试事件并轻松查看用户操作何时引发事件。还有一堆元数据也写入了这些调试日志,我不想将它们包含在监控脚本的输出中。

有没有一种方法可以使用sedawk仅打印大括号(包括大括号)中包含的数据?大括号内的数据可以而且总是跨越多行。

数据可能如下所示:

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
}

标签: bashawksedtail

解决方案


使用多个 sed

sed -n '/{/,/}/p' InputFile | sed '/^{/d' | sed '/^}/d'

使用单 sed

sed -n '/{/,/}/{/{/!{/}/!p}}' InputFile

推荐阅读