grep -v와 grep -A를 결합하여 효과를 얻을 수 있는 방법이 있습니까?

grep -v와 grep -A를 결합하여 효과를 얻을 수 있는 방법이 있습니까?

(실제로) 및 를 grep결합하는 방법이나 다른 방법이 있습니까 ? 즉, 오히려grep -vgrep -A포함하다문자열 뒤의 모든 x 줄,들어오지 못하게 하다모든 것.

grep 스위치를 잊어버린 사람들을 위한 빠른 알림:
cat file.txt | grep -v blah 일반 grep과 달리 'blah'를 필터링하면
cat file.txt | grep -A7 foo 'foo'가 발생할 때마다 7줄이 표시됩니다
(예, 여기서는 필요하지 않다는 것을 알고 있습니다 cat. 하지만 더 읽기 쉽습니다. grep여러 명령문을 함께 연결하여 이 작업을 수행 하는 경우 .)

그냥 그렇게 말하면
cat file.txt | grep -A100 bar | grep -vA100 foo
안 돼요. "Working"은 "bar"와 일치하는 줄과 "foo"와 일치하는 줄 사이의 모든 내용(최대 100줄)을 표시하도록 정의됩니다.

답변1

barsed를 사용하여 a에서 a로 모든 청크를 추출하는 쉬운 방법이 있습니다 .foo

sed -n '/bar/,/foo/p'

아니면 awk를 사용하세요:

awk '/bar/, /foo/'

청크를 자르려면 조금 더 복잡합니다(awk에서는, sed에서는 훨씬 더 복잡합니다). 해결책은 다음과 같습니다.

awk -vmax_lines_per_chunk=100 '
    /bar/ {n=max_lines_per_chunk}
    /foo/ {if (n) print; n=0}
    n {--n; print}
'

관련 정보