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