錯誤代碼:
grep foo | wc -l
正確代碼:
grep -c foo
對於多個文件
錯誤代碼:
grep foo * .log | wc -l
正確代碼:
cat * .log | grep foo -c
修正原因:
這單純是一種程式編碼上風格問題,因 grep 可以直接進行計算無須再次利用管道方式傳送至 wc 進行運算。
檢查有無符合的匹配項目,在沒有符合的項目時(參數值==0),此情形下使用 grep -q 甚至更加清晰及高效率,例如下列示範:
if grep -q pattern file; then
echo "此文件有符合的項目"
fi
當如果執行 foo | grep bar | wc -l,在正常情形下無法顯示 grep 執行時的異常訊息,並且始終顯示執行成功,錯誤排除時難以查找問題。如果替換成 foo | grep -c bar 則在沒有匹配項目時退出會顯示 0 。
例外狀況:
如果在特定情形下 wc 指令可以使結果更清楚,就可以忽略此寫法。