Grep invert는 컨텍스트와 일치합니다.

Grep invert는 컨텍스트와 일치합니다.

반전 일치를 사용하여 파일을 grep하려고 하지만 일치하는 줄 바로 뒤에 나오는 모든 줄을 일치시키지는 않습니다.

그래서 다음과 같은 파일에 다음 내용이 있습니다 testing_grep.

aaaaaaaaaaaaaaaaaa
bbbbbbbbbbbbbbbbbb
bbbbbbbbbbbbbbbbbb
cccccccccccccccccc
dddddddddddddddddd
llllllllllllllllll
dddddddddddddddddd
llllllllllllllllll
fffffffffffffffff
fffffffffffffffff

d그래서 나는 일치하는 항목을 포함하는 줄과 일치하는 다음 줄을 제외한 모든 줄을 일치시키고 싶으 므로 다음 grep명령을 사용합니다.

 grep -v "d" -A 1 testing_grep.txt 

그러나 필요한 것은 다음 출력뿐입니다.

aaaaaaaaaaaaaaaaaa
bbbbbbbbbbbbbbbbbb
bbbbbbbbbbbbbbbbbb
cccccccccccccccccc
fffffffffffffffff
fffffffffffffffff

도움을 주셔서 감사합니다.

답변1

GNU sed로 이것을 시도해 보세요:

패턴 공간(현재 행)에서 g를 //포함하는 행을 검색( ) 합니다 d. 해당 라인에 대해서만 다음 입력 라인을 패턴 공간에 추가하고( N) 패턴 공간을 삭제합니다( d).

sed '/d/{N;d;}' testing_grep.txt

산출:

아아아아아아아아아아아아아아아
bbbbbbbbbbbbbbbbbb
bbbbbbbbbbbbbbbbbb
cccccccccccccccccc
ffffffffffffffff
ffffffffffffffff

답변2

Cyrus는 이미 완벽한 답변을 얻었지만, 원한다면 grep을 사용하여 답변을 작성하세요(더 복잡함).

원하지 않는 줄을 찾아서 파일에 넣습니다.

grep 'd' -A 1 testing_grep.txt > otherfile.txt

otherfile.txt 내용은 다음과 같습니다. dddddddddddddddddd llllllllllllllllll dddddddddddddddddd llllllllllllllllll

그런 다음 diff 명령을 사용하여 차이점을 확인합니다.

diff testing_grep.txt otherfile.txt | grep '^[<>]'

관련 정보