tee, sed - 如何去除由开始和停止符号表示的文本块

tee, sed - how to strip out block of text denoted by a start and stop symbol

当我构建时,我经常使用 make --print-data-base 来调试我的文件。但是,我并不总是想看到整个数据库。

数据库的开始由 # Make data base, printed on 表示,停止由 # Finished Make data base 表示。

我知道我可以制作一个脚本,在构建完成后执行此操作 - 也许我应该这样做 - 但有没有办法使用 sed 来完成此操作?

make all --print-data-base 2>&1 | tee build-with-data-base.err | sed **something** | tee build-with-no-data-base.err

我在这里看到的问题是涉及状态:当您到达数据库部分的开头时,您关闭流,当您到达结尾时,您重新打开流。

是否可以使用 sed 执行此操作,还是我应该使用脚本执行此操作?

使用 GNU sed,您可以使用开始和结束由 /test/ 描述的范围:

echo "a
b
c
d
e
f" | sed  '/b/,/e/d'   # delete the lines from b to e
a
f

在您的情况下,您可以使用以下 sed 命令:

sed '/# Make data base, printed on/,/# Finished Make data base/d'