sed: 일치하는 패턴만 검색하고 인쇄합니다.

sed: 일치하는 패턴만 검색하고 인쇄합니다.

2GB Maven 빌드 로그 파일에서 예외 및 해당 모듈을 캡처해 보세요. 로그 파일 형식:

[main] [INFO] -------------< org.maven.plugins.junt:parent >-------------
[main] [INFO] Building junt-parent 1.0.0-SNAPSHOT 
...........
...........
...........
........... 
Exception units:
 <failed units>
 <failed units>

다음 옵션이 제안되었지만 둘 다 일치 전후에 추가 줄을 인쇄합니다. 예외 셀을 기록한 모듈을 찾아 일치시키는 방법을 잘 모르겠습니다. 이 두 일치 항목 사이의 줄은 필요하지 않으며 예외 장치와 해당 모듈에 실패한 모듈만 필요합니다.

sed -n '/Exception units/,/^$/p' maven_build.log또한sed -n '/Building/,/Exception units/!p'

편집: 예상 출력:

Building junt-parent 1.0.0-SNAPSHOT 
Exception units:
 <failed units>
 <failed units>

답변1

댓글을 보면 실제로 다음과 같은 파일이 있다는 것을 알 수 있습니다.

[main] [INFO] Building bar 1.0.0-SNAPSHOT
... Building ........
[main] [INFO] -------------< org.maven.plugins.junt:parent >-------------
[main] [INFO] Building junt-parent 1.0.0-SNAPSHOT 
... Building ........
Exception units:
 <failed units>
 <failed units>

[main] [INFO] Building foo 1.0.0-SNAPSHOT
... Building ........

Exception units:그리고 빈 줄까지, 마지막 줄 앞에 줄을 인쇄하려는 줄 이 있는 경우에만 [main] [INFO] Building메시지가 속한 모듈을 알 수 있습니다. 다른 [main] [INFO] Building모든 것들은 예외 없이 인쇄되어야 하지 않나요 ?

이 경우 필요할 때 다시 불러올 수 있도록 [main] [INFO] Building각 행을 예약된 공간에 저장할 수 있습니다.h

sed -ne '/\[main] \[INFO] Building/h;/Exception units:/{x;p;x;}' -e '//,/^$/p'

Exception units:줄이 발견 되면 공백을 변경하고 x저장된 Building줄을 인쇄 p한 다음 x공백을 다시 변경합니다. 마지막으로 빈 줄까지 모든 줄이 p인쇄됩니다(빈 패턴은 //마지막 패턴과 일치하므로 반복할 필요가 없습니다). 출력은 다음과 같습니다

[main] [INFO] Building junt-parent 1.0.0-SNAPSHOT 
Exception units:
 <failed units>
 <failed units>

이것이 원하는 것이 아니라면 실제 사례를 들어주세요.

관련 정보