sed\awk를 사용하여 파일 내의 특정 줄을 찾은 다음 다른 패턴과 일치하는 모든 후속 줄을 일치시키려면 어떻게 해야 합니까?

sed\awk를 사용하여 파일 내의 특정 줄을 찾은 다음 다른 패턴과 일치하는 모든 후속 줄을 일치시키려면 어떻게 해야 합니까?

비슷한 주제를 찾았지만 이를 직접 사용하기 위해 구현하는 방법을 알 수 없습니다.

일치하는 대상 라인 다음에 여러 라인을 가져옵니다.

문제는 다음과 같습니다.

내 프로젝트에 구현하려고 하는데 제대로 작동하지 않는 것 같습니다. 저는 Linux를 사용하고 있습니다. 누군가 이를 분해할 수 있습니까?

기본적으로 내가 하려는 일은 로그 번들을 살펴보고 스택\세부 사항과 함께 특정 줄을 캡처하는 것입니다. 예는 다음과 같습니다.

2020-01-20T05:58:19.119Z verbose vpxa[6E21B70] [Originator@6876 sub=PropertyProvider opID=k5cokp1a-928316-auto-jwal-h5:70047736-92-01-84] [CommitChangesAndNotify] Updating cached values
2020-01-20T05:58:19.119Z info vpxa[6E21B70] [Originator@6876 sub=Default opID=k5cokp1a-928316-auto-jwal-h5:70047736-92-01-84] [VpxLRO] -- ERROR task-107599 -- **vm-1178** -- vim.VirtualMachine.reconfigure: vmodl.fault.InvalidArgument:
--> Result:
--> (vmodl.fault.InvalidArgument) {
-->    faultCause = (vmodl.MethodFault) null,
-->    faultMessage = (vmodl.LocalizableMessage) [
-->       (vmodl.LocalizableMessage) {
-->          key = "msg.disk.extendFailure",
-->          arg = (vmodl.KeyAnyValue) [
-->             (vmodl.KeyAnyValue) {

패턴이 변경될 때까지 "vm-1178"을 포함하는 모든 줄과 "-->"로 시작하는 모든 후속 줄을 캡처한 다음 다음에 이 문제가 발생할 때까지 vm-1178을 찾기 시작합니다.

그것이 의미가 있기를 바랍니다. 감사해요!

답변1

이 시도,

awk '!/^-->/{p=0} /vm-1178/{p=1} p'
  • !/^-->/{p=0}: p줄이 로 시작하지 않을 때마다 var(print와 유사)를 0으로 설정합니다 -->.
  • /vm-1178/{p=1}: 줄이 일치할 때마다 var p= 1 로 설정합니다 /vm-1178/.
  • pp: true 일 때마다 줄을 인쇄합니다 (여기=1).

답변2

awk해당 목적으로 사용할 수 있습니다 .

awk 'index($0,"vm-1178")>0 {in_pat=1; print; next} \
in_pat == 1 && $0 ~ /^-->/ {print; next} \
{in_pat=0}' logfile.txt

여기에는 세 가지 규칙이 포함됩니다.

  • 첫 번째 규칙은 패턴이 포함된 행을 찾아 이를 인쇄하고 내부 플래그를 in_pat1로 설정합니다.
  • 두 번째 규칙은 다음으로 시작하는 모든 줄 -->도 인쇄된다는 것입니다.
  • 세 번째 규칙은 첫 번째 줄에서 해당 플래그를 재설정하는 데 사용됩니다.~ 아니다패턴을 포함하거나 로 시작하지 않으므로 -->패턴을 다시 찾을 때까지 아무것도 인쇄되지 않습니다.

첫 번째 규칙에서는 indexRegExp 일치 대신 함수가 사용됩니다. 이는 정규식에서 특별한 의미를 갖는 문자가 포함된 패턴도 찾을 수 있도록 하기 위한 것입니다.

답변3

Perl을 사용하면 다음과 같이 작동합니다.

 perl -ne ' { $t=0 if ( !/^-->/ ); $t=1 if(/vm-1178/); print if($t); }' <filename>

관련 정보