Bash 中的别名管道操作

Bash 中的别名管道操作

我经常会grep -R foo .在项目的根目录下做类似的事情。这很有帮助,但是结果会因为包含我不关心的二进制文件、临时文件和测试文件而受到削弱。所以我最终加上了2>&1 | grep -vE “Binary|/tmp/|/test/“,这会过滤掉我不关心的东西。问题是,每次输入都很麻烦。2>&1 之后的所有内容(包括和)在各个查询中都保持不变。所以我想把它放在一个别名中,这样我就可以使用它grep -R foo . <thingie>,其中 thingie 是相当短的东西。我尝试过别名和环境变量,但别名只有当它们是行中的第一个单词时才有效,而环境变量我可以用来扩展,${thingie}但管道似乎在过程中搞砸了。有什么关于如何让它工作的想法吗?

答案1

是的,函数是可行的方法。如果你有 GNU grep

  1. 使用该--exclude-dir选项,因此递归搜索甚至不会理会它。
  2. 使用--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'

相关内容