Shell-Script

grep 標誌不忽略大小寫

  • January 29, 2021

我有一個簡單的腳本來搜尋我的程式碼源中的模式,名為prgrep

#!/usr/bin/bash
grep -irnI --exclude-dir={.git,obj} --exclude=tags --color=auto "$@"

(它是一個腳本而不是別名或函式的事實是我希望能夠從內部vim和使用任何 shell 呼叫它)

請注意,搜尋不區分大小寫(因為我認為這是一個很好的預設搜尋)並且腳本接受任何接受的標誌grep

我想要grep一個標誌--no-ignore-case,以便腳本的呼叫者可以覆蓋腳本的-i標誌,但GNU grep不提供這個。

你有什麼簡單的想法來提供這樣的功能嗎?目前我有一個名為的單獨腳本Prgrep,它執行區分大小寫的搜尋。

編輯
do 的 最新版本GNU grep提供了一個--no-ignore-case選項,這正是我所需要的。我正在使用GNU grep 3.1,它仍然沒有這個選項。

新版本具有覆蓋grep的選項:--no-ignore-case``-i

–no-ignore-case

不要忽略模式和輸入數據中的大小寫區別。這是預設設置。此選項對於傳遞給已使用 -i 的 shell 腳本很有用,以取消其效果,因為這兩個選項相互覆蓋。

對於舊版本的grep,您可以簡單地將其作為選項添加到您的腳本中:

#!/usr/bin/bash
if [ "$1" = "--no-ignore-case" ]; then
   shift
   grep -rnI --exclude-dir={.git,obj} --exclude=tags --color=auto "$@"
else
   grep -irnI --exclude-dir={.git,obj} --exclude=tags --color=auto "$@"
fi

注意:--no-ignore-case呼叫腳本時需要成為第一個參數。

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