일치 후 grep -v를 실행하고 다음 줄을 제외하려면 어떻게 해야 합니까?

일치 후 grep -v를 실행하고 다음 줄을 제외하려면 어떻게 해야 합니까?

grep 정규 표현식과 일치하는 각 줄마다 2줄을 필터링하는 방법은 무엇입니까?
내 최소한의 테스트는 다음과 같습니다.

SomeTestAAAA
EndTest
SomeTestABCD
EndTest
SomeTestDEFG
EndTest
SomeTestAABC
EndTest
SomeTestACDF
EndTest

예를 들어 분명히 시도해 보았지만 grep -vA 1 SomeTestAA작동하지 않았습니다.

원하는 출력은 다음과 같습니다.

SomeTestABCD
EndTest
SomeTestDEFG
EndTest
SomeTestACDF
EndTest

답변1

(PCRE) grep와 함께 사용할 수 있습니다 .-P

grep -P -A 1 'SomeTest(?!AA)' file.txt

(?!AA)너비가 0인 부정 예측 모드이며 AA이후에는 없음을 보장합니다 SomeTest.

시험:

$ grep -P -A 1 'SomeTest(?!AA)' file.txt 
SomeTestABCD
EndTest
SomeTestDEFG
EndTest
SomeTestACDF
EndTest

답변2

sedGNU 의 명령을 사용하여 d행을 삭제하고 접두어를 붙여 /pat/,+N패턴 및 후속 행과 일치하는 행을 선택할 수 있습니다질소철사. 당신에 관한 한,질소= 1입니다. 왜냐하면 일치하는 행 뒤에 있는 단일 후속 행만 삭제하려고 하기 때문입니다.

sed -e '/SomeTestAAAA/,+1d'

답변3

아래 GNU 명령을 사용해 보십시오 sed. 훌륭하게 작동합니다.

주문하다

sed  '/SomeTestAA/,+1d' filename

산출

SomeTestABCD
EndTest
SomeTestDEFG
EndTest
SomeTestACDF
EndTest

답변4

p한 가지 옵션은 ERL c호환 r일반 expression을 사용하는 것입니다 grep.

pcregrep -Mv 'SomeTestAA.*\n' file

이 옵션을 사용하면 -M둘 이상의 행에서 패턴 일치를 허용합니다.

관련 정보