¿Por qué "grep -q -v" solo funciona con entrada de una sola línea?

¿Por qué "grep -q -v" solo funciona con entrada de una sola línea?

Si lo uso grep -qen combinación con -vpara devolver 0 si no hay coincidencias o 1 si hay una coincidencia, funciona siempre que la entrada sea una sola línea:

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

Pero si la entrada es de varias líneas, grep siempre devolverá 0:

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

¿Cuál es el motivo de tal comportamiento?

Sé que la forma correcta en este caso sería usar ! grep -qen lugar de grep -q -v, pero aún así quiero saber la respuesta.

Respuesta1

Por manual de grep:

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

Si proporciona solo una línea abcy le indica grepque seleccione solo las líneas que no coinciden, aobtendrá una salida vacía y un código de retorno igual a 1.

Si proporciona tres líneas a, by cy le indica grepque seleccione solo aquellas que no coinciden, aobtendrá by cen la salida y 0 como código de retorno.

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

información relacionada