Skip to content

SC2126 建議使用 grep -c代替 grep | wc

錯誤代碼:

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 指令可以使結果更清楚,就可以忽略此寫法。

參考來源:

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。