我有一个简单的脚本来搜索代码源中的模式,名为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 grep
do 提供了一个--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
调用脚本时需要将其作为第一个参数。