Command-Line
為什麼“grep -q -v”只適用於單行輸入?
如果我
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
,b
和c
並告訴grep
僅選擇那些與a
您不匹配的行b
,則c
在輸出中和 0 作為返回碼。$ echo -e 'a\nb\nc' | grep -v a; echo $? b c 0