3개의 값이 있는 여러 줄의 정규식 일치

3개의 값이 있는 여러 줄의 정규식 일치

이에 대한 몇 가지 예를 보았지만 특정 상황에서는 작동하지 않는 것 같습니다. 아래 파일이 있다고 가정 해 보겠습니다.

foo
line 1
line 2
line 3
bar
junk
junk
foo
line 1
line 2
baz
line 4
bar

나는 하나의 라이너로 'baz'를 포함하는 한 'foo'와 'bar' 사이의 모든 것을 잡으려고 노력하고 있습니다.

지금까지 내가 찾은 모든 것은 foo와 bar 사이의 모든 것을 찾는 데는 훌륭하지만, baz가 포함된 경우에만 찾는 데에는 좋은 것이 없는 것 같습니다.

편집: 아래는 저에게 효과적입니다.

sed -n '/foo/{:a;N;/bar/!ba; /baz/p}' input.txt

답변1

awk '
/foo/ { save=1 }
/baz/ { p=1 }
/bar/ { if (p) { print out ORS $0; } p=0; save=0; out="" }
{ if (save) { if (out) { out = out ORS $0 } else { out = $0 } } }
' input

/foo/가 보이면 줄 저장을 시작합니다. /baz/가 보이면 인쇄할 가치가 있다고 결정하고 /bar/가 보이면 /baz/가 보이면 저장된 줄을 인쇄합니다.

수동으로 테스트하지 않고 "out" 변수의 시작 부분에 빈 줄(ORS)이 표시되지 않도록 하는 더 현명한 방법을 찾을 수 없습니다.

관련 정보