我希望我的grep命令更短,例如,能够在命令行中键入g来执行带有选项-Pei的grep。
我试过在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发布于 2015-03-28 23:48:31
您的别名有两个不同的问题:
--而不是-开头)需要在选项名与其值之间设置一个= (参数):- I.e., it should be `--color=auto`, not `--color auto`
-e不正确:它的目的是接受多个搜索模式,每个-e实例都需要一个参数--在您的示例中,[-]e后面直接跟着i,因此错误地充当-e的参数,即作为模式,导致将真正的搜索模式误解为文件名操作数。因此,将别名重新定义如下:
alias g='grep --color=auto -Pi'Update:正如tripleee's answer所暗示的那样,使用-e有一个优点:它允许您指定以-开头的模式,而不会被误解为进一步的选项;因此,将-e放在别名中将提供该优势。
alias g='grep --color=auto -Pie'当然,不将-e构建到别名中总是会让您在调用别名时按需指定它,这将使多个-e选项的使用更加直观。
最后,@那个人在评论中给出的建议值得注意:
在定义别名之前,请确保其定义按照预期的方式作为直接输入的命令工作。
发布于 2015-03-28 23:49:38
选项-e不正确。在使用它的方式上,您指定搜索表达式是i (也就是说,-Pei被解释为-P -e i,而不是-P -e -i)。切换到-Pie (如果不需要搜索以破折号开头的表达式,则只使用-Pi )。
在第一次尝试中,您还需要一个等号,而不是color和auto之间的空格。
与别名相比,您通常更喜欢函数,尽管在这个有限的场景中,别名也能工作。
function关键字是一种bashism;删除它可以提高代码的可移植性。
不要指定grep的路径,而是要确保您的PATH是正常的。
g () { grep -Pie "$@" ;}https://stackoverflow.com/questions/29323768
复制相似问题