연속되지 않은 패턴을 파악하는 방법...
이 명령을 실행합니다.
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]