Command-Line

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

  • February 12, 2016

如果我grep -q在沒有匹配時返回 0 或在匹配時返回 1 結合使用-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,但我仍然想知道答案。

每個握把手冊:

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

如果您只提供一行abc並告訴grep只選擇不匹配的行,a您將得到一個空輸出並返回等於 1 的程式碼。

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

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

引用自:https://unix.stackexchange.com/questions/261756