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'
当我构建时,我经常使用 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'