首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何缩短这个grep命令?

如何缩短这个grep命令?
EN

Stack Overflow用户
提问于 2015-03-28 23:20:36
回答 2查看 195关注 0票数 0

我希望我的grep命令更短,例如,能够在命令行中键入g来执行带有选项-Peigrep

我试过在Bash里用别名,但是管道不起作用。

代码语言:javascript
复制
 alias g='grep --color auto -Pei'

给我

代码语言:javascript
复制
 history |g qemu
 grep: auto: No such file or directory
 grep: qemu: No such file or directory

然后我试了一下.bashrc

代码语言:javascript
复制
 function g () { /bin/grep -Pei "$@" ;}

它仍然输出

代码语言:javascript
复制
 history |g qemu
 grep: qemu: No such file or directory
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-03-28 23:48:31

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

  • 长格式GNU选项(以--而不是-开头)需要在选项名与其值之间设置一个= (参数):
代码语言:javascript
复制
- I.e., it should be `--color=auto`, not `--color auto`

  • 您使用的选项-e不正确:它的目的是接受多个搜索模式,每个-e实例都需要一个参数--在您的示例中,[-]e后面直接跟着i,因此错误地充当-e的参数,即作为模式,导致将真正的搜索模式误解为文件名操作数。

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

代码语言:javascript
复制
alias g='grep --color=auto -Pi'

Update:正如tripleee's answer所暗示的那样,使用-e有一个优点:它允许您指定以-开头的模式,而不会被误解为进一步的选项;因此,将-e放在别名中将提供该优势。

代码语言:javascript
复制
alias g='grep --color=auto -Pie'

当然,不将-e构建到别名中总是会让您在调用别名时按需指定它,这将使多个-e选项的使用更加直观。

最后,@那个人在评论中给出的建议值得注意:

在定义别名之前,请确保其定义按照预期的方式作为直接输入的命令工作。

票数 1
EN

Stack Overflow用户

发布于 2015-03-28 23:49:38

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

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

与别名相比,您通常更喜欢函数,尽管在这个有限的场景中,别名也能工作。

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

不要指定grep的路径,而是要确保您的PATH是正常的。

代码语言:javascript
复制
g () { grep -Pie "$@" ;}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29323768

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档