Bash
grep -v 過濾器不起作用
我想
grep
使用grep -v
選項過濾結果。但是在使用特定模式時,輸出並沒有什麼不同。log.log 的內容:ERROR error EXCEPTION exception <STATUS>ERROR</STATUS> <MessageType>ERROR</MessageType>
當我執行命令時:
egrep -wi 'error|exception' /temp/log.log | grep -v 'error'
給出輸出:
ERROR EXCEPTION exception <STATUS>ERROR</STATUS> <MessageType>ERROR</MessageType>
但是如果我執行命令:
egrep -wi 'error|exception' /temp/log.log | grep -vi '<STATUS>ERROR</STATUS>'
它仍然給出輸出:
ERROR EXCEPTION exception <STATUS>ERROR</STATUS> <MessageType>ERROR</MessageType>
而我期待:
ERROR EXCEPTION exception <MessageType>ERROR</MessageType>
為什麼會這樣?
出現問題是由於
egrep -w 'error|exception'
. 此命令在模式(即錯誤或異常)之前和之後添加特殊字元,以在 grep 結果中突出顯示這些模式。正如哈拉爾所說。‘ERROR’ 模式與 grep 輸出語句不匹配,因為 grep 輸出中的 STATUS 標記之間的 ‘ERROR’
-w
標誌添加了一些特殊字元。因此,當
egrep
’ 結果發送到grep -v
命令時,它無法匹配模式。