各ブロックの後にキーを押すまで一時停止し、2つのパターン間の線を印刷します。

各ブロックの後にキーを押すまで一時停止し、2つのパターン間の線を印刷します。

sedまたはawk2つのパターン間の線を印刷できますが、1つずつ表示するにはどうすればよいですか?

はい - 出力の最初の部分を表示し、このキーを押すと出力Spaceの2番目の部分が表示され、パターンに一致するすべての部分が表示されるまで続きます。

---------------------START HERE--------------------
Server Name : ABC 
xxxx 
xxxx 
xxxx 
xxxx 
---------------------END HERE---------------------- 

---------------------START HERE--------------------
Server Name : XYZ 
YYYY 
YYYY 
YYYY 
---------------------END HERE-------------------- 

上記の情報を含むファイルの場合は、次の出力を表示するためにキーを押すまで中断/一時停止を使用して情報を1つずつ表示するにはどうすればよいですか?

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

関連情報