내 로그 파일:
...
----------
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