Awk

在兩個模式之間列印行,在每個塊之後暫停直到按鍵

  • January 9, 2020

我的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 

一次顯示所有內容。

使用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顯示下一部分的輸出就足夠了。

引用自:https://unix.stackexchange.com/questions/530069