我的sed
orawk
可以打印两个图案之间的线条,但是如何让它一条一条地显示呢?
示例 - 它应该显示输出的第一部分,当我按下它时,Space它应该显示输出的第二部分,依此类推,直到它显示与模式匹配的所有部分。
---------------------START HERE--------------------
Server Name : ABC
xxxx
xxxx
xxxx
xxxx
---------------------END HERE----------------------
---------------------START HERE--------------------
Server Name : XYZ
YYYY
YYYY
YYYY
---------------------END HERE--------------------
对于包含上述信息的文件,如何将信息一一显示,中间有休息/暂停,直到按下某个键以显示下一个输出。
我的sed
命令
sed -n '/START/,/END/p' /tmp/output
一次显示所有内容。
答案1
使用sed
,您可以在遇到模式时强制处理“暂停” END HERE
:
sed -n -e '/START HERE/,/END HERE/{p' -e '/END HERE/r /dev/stdin' -e '}' file
或者,作为sed
脚本:
/START HERE/,/END HERE/ {
p
/END HERE/ r /dev/stdin
}
这只是测试END HERE
输入中的模式并开始从标准输入读取。这会暂时停止数据处理,直到r
命令完成。
您可以按 来“取消暂停” Ctrl+D。
同样的事情awk
:
awk '/START HERE/,/END HERE/ { print; if (/END HERE/) getline dummy <"/dev/stdin" }' file
在这里,由于我们用于getline
获取用户的输入,因此按 即可Enter显示下一部分输出。
答案2
你对 Python 还好吗?
from __future__ import print_function
import fileinput
show = False
for line in fileinput.input('a.txt'):
if "START HERE" in line:
show = True
continue
if "END HERE" in line:
show = False
try:
input("Press ENTER to continue")
except:
pass
print(chr(27) + "[2J") # Clear screen
continue
if show:
print(line, end='')