Sed
獲取日誌文件的最後一個“塊”(模式)
我的日誌文件:
... ---------- text1 text2 ---------- text3 text4 ----------
現在我只想grep最後一個塊(在“———”之間)-> text3/text4
謝謝 :-)
沒有找到任何解決方案…
這是一個更長的範例輸入:
---------- texta textb ---------- textc textd ---------- texte textf ---------- textg texth ---------- text1 text2 ---------- text3 text4 ----------
所需的輸出僅是最後一個塊:
text3 text4
使用 tac 先查看最後幾行,然後抓取第一個塊,列印它,然後退出 sed,再次 tac 以恢復順序。
$ tac file | sed -ne ' /--/,/--/!d //G /\n/!{p;d;} /\n$/!q s/.*/.*/;h ' | tac
為了解決這個問題而無需先反轉行,我們使用 Perl 將塊的內部行儲存在數組 @A 中。每次我們在塊的開頭時,都要丟棄數組。僅在 eof 處列印數組。
$ perl -ne ' print(@A), last if eof; my $e = /--/ ... /--/; # get location in blk $#A=-1, next if $e == 1; # begin blk redo if $e =~ /E0/; # end blk push @A, $_ if $e; # inner lines of blk ' file text3 text4