텍스트파일에서 특정 문자열 구간 추출

웃는 남자의 이미지

텍스트파일(로그파일)에서 특정 문자열로 구분되는 구간을 라인단위로 추출해내고 싶습니다.
예를 들면 아래 텍스트파일 내용 중 에서 __Exception 으로 시작하는 라인에서부터 __!Exception 으로 끝나는 라인까지의 구간을 추출할려고
합니다.

스크립트를 어떻게 짜야 될런지? ;;

<<__Exception__>>
java.sql.SQLException: ORA-01427: 단일 행 부속 질의에 2개 이상의 행이 리턴되었습니다
 
        at keynet.common.db.debug.DebuggableStatement.handleException(DebuggableStatement.java:306)
        at keynet.common.db.debug.DebuggableStatement.executeQuery(DebuggableStatement.java:260)
        at keynet.ems.common.EventDAO.getContractNo(EventDAO.java:189)
 ....
.....
 
<<__!Exception__>>

techneer의 이미지

awk 쓰면 간단하게 됩니다.

cat log.txt | awk 'BEGIN {flag=0} /__!Exception__/ {flag=0} {if (flag) print $0} /__Exception/ {flag=1}'

__Exception__ 이란 스트링도 같이 뽑아내고 싶으시면...
flag 세팅하는 부분하고 print 하는 부분 순서를 조절해보세요.