我通常在Linux / Unix上构建长的多命令管道来处理大型文本文件(sed | grep | sort | less等)。
我希望能够使用一个管道元素来缓冲通过stdin接收的所有内容,直到检测到一个关键短语/字符串(例如“SUCCESS”),此时它会将收到的所有内容释放到stdout和然后继续通过其余的流。如果未检测到关键短语,程序将丢弃所有内容。
是否有标准命令可以执行此操作,还是需要编写Perl脚本?
提前感谢您的任何想法!
Wodow,爱好管道
答案 0 :(得分:2)
您可以使用简单的awk / gawk 1衬垫来执行此操作:
编辑:更新以修复dmckee在其评论中指出(和修复)的错误
gawk'{sum = sum“\ n”$ 0}; / success / {print sum}'
答案 1 :(得分:1)
可能最简单的解决方案是使用sed
:
sed '/SUCCESS/,$!{H;d;};$H;x'
答案 2 :(得分:0)
快速而肮脏的方式就是这样:
perl -pe'$b.=$_;/SUCCESS/&&last}print$b;while(<>){'
但如果你经常这样做,它应该有自己的脚本。