如何缩短此 grep 命令?

How do I shorten this grep command?

我希望我的 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

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

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

    • 也就是说,应该是--color=auto,而不是--color auto
  • 你错误地使用了选项-e:它的目的是接受多个搜索模式,每个 -e 实例 需要一个参数 - 在你的例子中,[-]e 直接跟在 i 之后,因此错误地用作 -e 的参数,即作为 模式 ,导致您的真实搜索模式被误解为 filename 操作数。

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

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

Update:正如 暗示的那样,使用 -e 有一个优点:它允许您指定 - 不会被误解为其他选项;因此,将 -e last 放在别名中会给您带来优势。

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

当然,不将 -e 构建到别名中总是让您可以选择 按需 指定它,当 调用 别名,这将使 multiple -e 选项的使用更加直观。


最后,@thatotherguy 在评论中给出的建议值得听取:

在定义别名之前,确保它的定义像直接输入的命令一样按预期工作。

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

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

您通常应该更喜欢函数而不是别名,尽管在这种有限的情况下,别名也可以。

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

不要指定 grep 的路径;相反,请确保您的 PATH 精神正常。

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