로그 파일의 마지막 "청크"(패턴) 가져오기

로그 파일의 마지막 "청크"(패턴) 가져오기

내 로그 파일:

...
----------
text1
text2
----------
text3
text4
----------

이제 마지막 블록("----------" 사이)만 grep하고 싶습니다 -> text3/text4

감사해요:-)

해결책을 찾지 못했습니다..


다음은 더 긴 입력 예입니다.

----------
texta
textb
----------
textc
textd
----------
texte
textf
----------
textg
texth
----------
text1
text2
----------
text3
text4
----------

원하는 출력은 마지막 블록입니다.오직:

text3
text4

답변1

tac를 사용하여 먼저 마지막 몇 줄을 살펴본 다음 첫 번째 청크를 가져와 인쇄한 다음 sed를 종료하고 tac를 다시 사용하여 순서를 복원합니다.

$ tac file |
  sed -ne '
     /--/,/--/!d
     //G
     /\n/!{p;d;}
    /\n$/!q
    s/.*/.*/;h
  ' | tac

답변2

행을 먼저 뒤집지 않고 이 문제를 해결하기 위해 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

답변3

이 시도,

tac file | sed -n '/----------/,/----------/{/----------/b;p}'
text4
text3

관련 정보