我有一个从 bash shell 启动的命令,它输出一大堆行。
我想查看它的所有输出,除了“寻找更改”和“等待来自服务器的更改”之间的行
所以假设实际输出是 -
1号线 2号线 寻找变化 3号线 4号线 等待来自服务器的更改 5号线 6号线
我只想看看——
1号线 2号线 寻找变化 等待来自服务器的更改 5号线 6号线
我可以编写一个快速的 python 脚本,我可以通过管道传输它,但我想知道它是否可以用开箱即用的东西来完成,比如 grep 或 awk。
我提出了这个解决方案:
$ 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'
.这是一个 awk one 班轮:
... | awk '/^Waiting for changes from server$/{p=0}p==0{print}/^Looking for changes$/{p=1}'
我们使用变量 p 作为标志。如果它为零,我们打印该行,否则我们不打印。当我们匹配指定的行时,标志会更改值。