Grep은 -v [duplicate]와 함께 -B를 사용할 수 없습니다.

Grep은 -v [duplicate]와 함께 -B를 사용할 수 없습니다.

내가 가지고 있다고 가정 해 봅시다 file:

cat
dog
bird

내가 실행하면 cat file | grep dog -B 1다음을 얻습니다.

cat
dog

내가 실행하면 cat file | grep dog -v다음을 얻습니다.

cat
bird

cat file | grep dog -v -B 1돌아올 수 있기를 원 하지만 플래그가 없는 bird것처럼 작동합니다 .grep dog

왜 이 플래그를 함께 사용할 수 없나요?

grep(GNU grep) 2.16, 2.25에서도 테스트됨, 동일한 결과

답변1

나는 그 반대를 얻기 위해 내 솔루션을 추가하고 싶습니다 grep dog -B 1.

cat file | grep "$(cat file | grep dog -B 1)" -v

bird생성된 것과 반대되는 결과를 반환합니다 cat file | grep dog -B 1.

내 초기 문제는 그것이 어떻게 작동해야 하는지에 대한 오해였던 것 같습니다. 나는 앱이 -v모든 명령을 되돌릴 것이라고 생각합니다 grep.

실제로 -v플래그가 먼저 실행된 후 -B 1적용되는 것으로 보이므로 dog포함되지 않은 행을 모두 반환하고 그 행 이전의 모든 행을 반환합니다. 즉, 모든 행을 의미합니다.


편집: 이 솔루션이 잘못되었음을 알고 있습니다. 서브셸을 사용하는 두 번째 grep은 이를 "$(cat file | grep dog -B 1)"단일 텍스트 블록 으로 처리하지 않기 때문에 반전되지 않습니다 . 대신 생성된 각 줄은 다른 grep으로 처리됩니다.

서브쉘에 다음이 포함된 경우:

cat
dog

원본 파일에는 cat이 솔루션을 사용하여 제거되기 전에 한 위치에 없었던 추가 인스턴스가 포함되어 있었습니다.dog

관련 정보