패턴 내에서 문자열을 찾는 명령

패턴 내에서 문자열을 찾는 명령

로그 파일의 내용은 다음과 같습니다.

Caused by: com.ofss.fc.framework.exception.BusinessException: The memo start date cannot be earlier than the process date.
at com.ofss.fc.domain.party.service.core.CommentService.validateMemos(CommentService.java:474)
at com.ofss.fc.lz.us.appx.party.service.core.ext.RegionalPartyAddressApplicationServiceSpiExt.preUpdatePartyAddress(RegionalPartyAddressApplicationServiceSpiExt.java:43)
at com.ofss.fc.appx.party.service.core.ext.PartyAddressApplicationServiceSpiExtExecutor.preUpdatePartyAddress(PartyAddressApplicationServiceSpiExtExecutor.java:82)
at com.ofss.fc.appx.party.service.core.PartyAddressApplicationServiceSpi.updatePartyAddress(PartyAddressApplicationServiceSpi.java:145)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)

Caused by: com.ofss.fc.framework.exception.BusinessException: The memo start date cannot be earlier than the process date.
at com.ofss.fc.domain.party.service.core.CommentService.validateMemos(TestService.java:474)
at com.ofss.fc.lz.us.appx.party.service.core.ext.RegionalPartyAddressApplicationServiceSpiExt.preUpdatePartyAddress(RegionalPartyAddressApplicationServiceSpiExt.java:43)
at com.ofss.fc.appx.party.service.core.ext.PartyAddressApplicationServiceSpiExtExecutor.preUpdatePartyAddress(PartyAddressApplicationServiceSpiExtExecutor.java:82)
at com.ofss.fc.appx.party.service.core.PartyAddressApplicationServiceSpi.updatePartyAddress(PartyAddressApplicationServiceSpi.java:145)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)

Caused다음 줄을 잡기 위해 노력 중

bash-4.1$ a=$(awk '/Caused/{getline; print}' testError.log )
bash-4.1$ echo $a

산출:

com.ofss.fc.domain.party.service.core.CommentService.validateMemos(CommentService.java:474) at com.ofss.fc.domain.party.service.core.CommentService.validateMemos(TestService.java:474)

() 내의 모든 파일 이름을 나열해야 합니다.

목록의 출력은 다음과 같아야 합니다.

CommentService.java
TestService.java

답변1

그리고 sed:

$ sed -n '/Caused/{
  N
  s/.*\n[^(]*(//
  s/:[^:]*$//
  p
}' <file

답변2

grepJava 파일 이름이 문자, 숫자 및 _로만 구성되어 있다고 가정하여 을 사용하십시오 .

awk '/Caused/{getline; print}' testError.log | grep -oE '\w+\.java'

sed일반 파일 이름 의 경우

awk '/Caused/{getline; print}' testError.log | sed -r 's/.*\((.*):.*/\1/'

답변3

동거하다awk

awk '/Caused/{getline; match($0, /[^(]*\.java/); 
     if (RSTART)print(substr($0, RSTART, RLENGTH))}' file

관련 정보