
私sed
またはawk
2つのパターン間の線を印刷できますが、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='')