1

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

我想查看它的所有输出,除了“寻找更改”和“等待来自服务器的更改”之间的行

所以假设实际输出是 -

1号线
2号线
寻找变化
3号线
4号线
等待来自服务器的更改
5号线
6号线

我只想看看——

1号线
2号线
寻找变化
等待来自服务器的更改
5号线
6号线

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

4

2 回答 2

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'.
于 2013-07-06T23:45:09.023 回答
1

这是一个 awk one 班轮:

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

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

于 2013-07-06T23:44:29.563 回答