내가 가지고 있다고 가정 해 봅시다 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