我经常会grep -R foo .
在项目的根目录下做类似的事情。这很有帮助,但是结果会因为包含我不关心的二进制文件、临时文件和测试文件而受到削弱。所以我最终加上了2>&1 | grep -vE “Binary|/tmp/|/test/“
,这会过滤掉我不关心的东西。问题是,每次输入都很麻烦。2>&1 之后的所有内容(包括和)在各个查询中都保持不变。所以我想把它放在一个别名中,这样我就可以使用它grep -R foo . <thingie>
,其中 thingie 是相当短的东西。我尝试过别名和环境变量,但别名只有当它们是行中的第一个单词时才有效,而环境变量我可以用来扩展,${thingie}
但管道似乎在过程中搞砸了。有什么关于如何让它工作的想法吗?
答案1
是的,函数是可行的方法。如果你有 GNU grep
- 使用该
--exclude-dir
选项,因此递归搜索甚至不会理会它。 - 使用
--binary-files=without-match
选项忽略二进制文件(别名-I
)。
所以:
mygrep() {
grep -R --exclude-dir=tmp --exclude-dir=test -I "$@" .
}
然后打电话
mygrep Foo
mygrep -i foo
mygrep -E '(foo|bar)baz'