為什麼“grep -q -v”僅適用於單行輸入?

為什麼“grep -q -v”僅適用於單行輸入?

如果我grep -q結合使用-v,如果沒有匹配則返回 0,如果有匹配則返回 1,只要輸入是單行,它就可以工作:

$ 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並告訴grep僅選擇不匹配的行,a您將獲得一個空輸出並傳回等於 1 的程式碼。

如果您提供三行ab和 ,c並告訴grep您僅選擇那些與a您在輸出中得到的b和不匹配的行,c並且 0 作為返回代碼。

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

相關內容