我希望我的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
答案 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
。)
在第一次尝试中,您还需要一个等号而不是color
和auto
之间的空格。
除了别名之外,您通常应该更喜欢函数,尽管在这种有限的情况下,别名也可以使用。
function
关键字是一种基础;删除它可以提高代码的可移植性。
不要指定grep
的路径;相反,请确保您的PATH
是理智的。
g () { grep -Pie "$@" ;}