打印两个模式之间的行,暂停直到每个块之后按下按键

打印两个模式之间的行,暂停直到每个块之后按下按键

我的sedorawk可以打印两个图案之间的线条,但是如何让它一条一条地显示呢?

示例 - 它应该显示输出的第一部分,当我按下它时,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='')

相关内容