如何缩短此grep命令?

时间:2015-03-28 23:20:36

标签: linux bash shell grep

我希望我的grep命令更短,例如,只需在命令行上键入g即可使用选项grep执行-Pei

我已尝试在Bash中使用别名,但管道无法正常工作。

 alias g='grep --color auto -Pei'

给了我

 history |g qemu
 grep: auto: No such file or directory
 grep: qemu: No such file or directory

然后我尝试了.bashrc

 function g () { /bin/grep -Pei "$@" ;}

它仍然输出

 history |g qemu
 grep: qemu: No such file or directory

2 个答案:

答案 0 :(得分:1)

您的别名有两个不同的问题:

  • 长格式GNU选项(以--而不是-开头的选项)在选项名称及其值(参数)之间需要=

    • 即,它应该是--color=auto,而不是--color auto
  • 您错误地使用了-e选项:其目的是接受多个搜索模式,每个 -e实例需要参数 - 在您的情况下,[-]e后面紧跟i,因此错误地充当-e的参数,即作为模式,导致您的真实搜索模式被误解为 filename 操作数。

因此,重新定义您的别名如下:

alias g='grep --color=auto -Pi'

更新:正如tripleee's answer所暗示的那样,使用-e有一个好处:它允许您指定-开头的模式没有被误解为进一步的选择;因此,将-e 最后放在别名中会给你带来这样的好处。

alias g='grep --color=auto -Pie'

当然,在调用别名时,不将-e构建到别名中总是让您可以选择按需 ,这将使使用多个 -e选项更具直观性。


最后,@ thatotherguy在评论中提出的建议值得注意:

在定义别名之前,请确保其定义与直接输入的命令一样正常工作。

答案 1 :(得分:1)

选项-e不正确。您使用它的方式是指定搜索表达式为i(即-Pei被解释为-P -e i,而不是-P -e -i)。如果您预计不需要搜索以破折号开头的表达式,请切换到-Pie(或仅-Pi。)

在第一次尝试中,您还需要一个等号而不是colorauto之间的空格。

除了别名之外,您通常应该更喜欢函数,尽管在这种有限的情况下,别名也可以使用。

function关键字是一种基础;删除它可以提高代码的可移植性。

不要指定grep的路径;相反,请确保您的PATH是理智的。

g () { grep -Pie "$@" ;}