我有一個日誌來處理版大約結構是這樣的:打印最後一個「窗口」與SED
...
...
sentinel
marker
...
marker
...
sentinel
marker
...
我想及以下sentinel
之間的一切,我想最後一個這樣的「窗口」。下面的工作確定:
sed -e "1{h;d} ; 2,109{H;d} ; 110{H;g} ; /sentinel/h ; \${g;q} ; N ; D" file.log
這裏,110是這個日誌 S之間的空間的粗略(但幾行內一致)的估計,但我不得不重新計算這個估計其他日誌,這是煩人的。
我不知道是否有一個更優雅的方式與sed
實現這一目標,即自動返回和之間sentinel
的最後一個窗口(我也會接受,說明了爲什麼你不能做到這一點的答案在sed
)。
謝謝。
P.S.我知道可以用任何語言做到這一點,但我想鍛鍊肌肉。
完美,在POSIX版本(又名非GNU sed)的情況下,用新行代替最後的';'(在'!d'後面)並在'}之前加上';'(或換行) – NeronLeVelu
不幸的是,這沒有奏效。我已經嘗試了一些這樣的事情。會發生什麼是'/ marker /,/ sentinel /'還會匹配'marker'和文件末尾之間的所有內容,所以它總是檢索文件的最後部分,而不管這裏是否有'sentinel'。 –
@JohnMoeller見編輯。 – potong