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>

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

관련 정보