각 블록 다음에 키를 누를 때까지 일시 중지하여 두 패턴 사이의 선을 인쇄합니다.

각 블록 다음에 키를 누를 때까지 일시 중지하여 두 패턴 사이의 선을 인쇄합니다.

sed또는 awk두 패턴 사이의 선을 인쇄할 수 있는데, 하나씩 표시하려면 어떻게 해야 합니까?

예 - 출력의 첫 번째 부분이 표시되어야 하고, 이 키를 누르면 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

파이썬으로 괜찮나요?

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='')

관련 정보