결과:

결과:

연속되지 않은 패턴을 파악하는 방법...

이 명령을 실행합니다.

grep -B 1 -A 2 "field-2-value" inputFile.txt |grep -v "field-3"

이 4개의 출력을 생성합니다.

  [필드-1]xxx[/필드-1]
  [필드2]필드2 값[/필드2]
  [필드-5]참[/필드-5]
  --
  [필드-1]yyy[/필드-1]
  [필드2]필드2 값[/필드2]
  [필드 4]필드 4 값[/필드 4]
  --
  [필드-1]zzz[/필드-1]
  [필드2]필드2 값[/필드2]
  [필드-5]거짓[/필드-5]
  --
  [field-1]흠[/field-1]
  [필드2]필드2 값[/필드2]
  [필드 4]필드 4 값[/필드 4]

저는 field-2 및 field-4 값을 사용한 두 번째 및 마지막 결과에만 관심이 있습니다.

 
  [필드-1]yyy[/필드-1]
  [필드2]필드2 값[/필드2]
  [필드 4]필드 4 값[/필드 4]

  [field-1]흠[/field-1]
  [필드2]필드2 값[/필드2]
  [필드 4]필드 4 값[/필드 4]

inputFile.txt는 다음과 같습니다.

[레코드ID="1"]
  [필드-1]xxx[/필드-1]
  [필드2]필드2 값[/필드2]
  [field-3]안녕하세요[/field-3]
  [필드-5]참[/필드-5]
[/기록]
[레코드ID="2"]
  [필드-1]yyy[/필드-1]
  [필드2]필드2 값[/필드2]
  [field-3]안녕하세요[/field-3]
  [필드 4]필드 4 값[/필드 4]
[/기록]
[레코드ID="3"]
  [필드-1]zzz[/필드-1]
  [필드2]필드2 값[/필드2]
  [field-3]안녕하세요[/field-3]
  [필드-5]거짓[/필드-5]
[/기록]
[레코드ID="4"]
  [field-1]흠[/field-1]
  [필드2]필드2 값[/필드2]
  [field-3]안녕하세요[/field-3]
  [필드 4]필드 4 값[/필드 4]
[/기록]

두 가지 작업 세트를 실행하는 쉘 스크립트를 작성하고 싶을 정도입니다. 먼저 이러한 결과가 포함된 각 파일에 대해 이러한 출력이 포함된 파일을 생성합니다. 그런 다음 필드 4가 없는 행 블록을 삭제합니다. 돕다!

답변1

sed -ne '
   /field-2-value/!{h;d;}
   H;n;n;/field-4/!d;H;g;s/$/\n/p
' inputFile.txt

/field-2/가 포함되지 않은 모든 행을 거부하고 보존 조치에 저장합니다. (마지막 것만 저장 가능)

따라서 /field-2/ 라인이 보이면 이를 추가하여 보류하고 다음 라인을 건너뛴 후 다음 라인에 /field-4/가 포함되어 있는지 확인합니다. 그렇지 않은 경우 OTW에 넣은 다음 보유에 추가한 다음 보유를 밖으로 이동하고 인쇄된 레코드가 분리되도록 후행 개행을 추가한 후 인쇄합니다.


결과:

  [field-1]yyy[/field-1]
  [field-2]field-2-value[/field-2]
  [field-4]field-4-value[/field-4]

  [field-1]mmm[/field-1]
  [field-2]field-2-value[/field-2]
  [field-4]field-4-value[/field-4]

관련 정보