过滤某些行之间的输出行

时间:2013-07-06 23:32:11

标签: shell awk grep stdout output

我有一个命令,我从bash shell启动,输出一大堆行。

我希望看到除了“寻找更改”和“等待服务器更改”行之间的行之外的所有输出

所以让我们说实际输出是 -

Line 1
Line 2
Looking for changes
Line 3
Line 4
Waiting for changes from server
Line 5
Line 6

我只想看 -

Line 1
Line 2
Looking for changes
Waiting for changes from server
Line 5
Line 6

我可以编写一个快速的python脚本,我可以通过它管道,但想知道是否可以使用开箱即用的东西,如grep或awk。

2 个答案:

答案 0 :(得分:2)

我出来了这个解决方案:

$ sed -n -e '1,/Looking/p' -e '/Waiting/,$p' file
Line 1
Line 2
Looking for changes
Waiting for changes from server
Line 5
Line 6
  • '1,/Looking/p'从文件开头打印到包含Looking的行。
  • '/Waiting/,$p'从包含Waiting的行打印到文件末尾。
  • sed -e是让sed执行不同块的方法:sed -e 'something' -e 'other thing'

答案 1 :(得分:1)

这是一个awk one liner:

... | awk '/^Waiting for changes from server$/{p=0}p==0{print}/^Looking for changes$/{p=1}'

我们使用变量p作为标志。如果它为零,我们打印该行,否则我们不打印。当我们匹配指定的行时,该标志会更改值。