grep 标志不忽略大小写

grep 标志不忽略大小写

我有一个简单的脚本来搜索代码源中的模式,名为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,它执行区分大小写的搜索。

编辑
最近版本的GNU grepdo 提供了一个--no-ignore-case选项,这正是我所需要的。我正在使用GNU grep 3.1,它仍然没有这个选项。

答案1

新版本有覆盖的grep选项:--no-ignore-case-i

--不忽略大小写
不要忽略模式和输入数据中的大小写区别。这是默认设置。此选项对于传递到已使用 -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调用脚本时需要将其作为第一个参数。

相关内容