"grep -q -v"가 한 줄 입력에서만 작동하는 이유는 무엇입니까?

"grep -q -v"가 한 줄 입력에서만 작동하는 이유는 무엇입니까?

일치 항목이 없으면 0을 반환하고 일치 항목이 있으면 1을 반환하기 위해 grep -q와 함께 사용하면 입력이 한 줄인 한 작동합니다.-v

$ echo 'abc' | grep -q -v a; echo $?
1
$ echo 'abc' | grep -q -v x; echo $?
0

그러나 입력이 여러 줄이면 grep은 항상 0을 반환합니다.

$ echo -e 'a\nb\nc' | grep -q -v a; echo $?
0
$ echo -e 'a\nb\nc' | grep -q -v x; echo $?
0

그러한 행동의 이유는 무엇입니까?

이 경우 올바른 방법은 ! grep -q대신을 사용하는 것이라는 것을 알고 있지만 grep -q -v여전히 답을 알고 싶습니다.

답변1

grep 매뉴얼에 따라:

-v, --invert-match
         Selected lines are those not matching any of the specified patterns.

한 줄만 제공 하고 일치하지 않는 줄만 선택하도록 abc지시 하면 빈 출력이 표시되고 반환 코드는 1이 됩니다.grepa

a, b및 3개 라인을 제공하면 일치하지 않는 라인만 선택하도록 c지시하면 출력에 및 0이 반환 코드로 표시됩니다 .grepabc

$ echo -e 'a\nb\nc' | grep -v a; echo $?
b
c
0

관련 정보