如何为“->” grep?

时间:2019-11-19 08:01:28

标签: shell grep

我想找出使用​​lambda表达式的Java文件列表。为此,我想grep表示“->”。一些类似于我的查询得到的响应是grep应该与-F选项一起使用。当我这样做时:

grep -F "->" *.java

我收到错误消息:

grep: invalid option -- >

我正在使用MacOS Darwin。

5 个答案:

答案 0 :(得分:5)

在关键字前面加上双连字符:

constructor(private bookingService: BookingTreeService) {
  this.bookings = this.bookingService.bookingTree;
 }

答案 1 :(得分:3)

POSIX specifies -e选项。它可以用来指定多个模式,但是对于以连字符开头的单个模式也很有用:

grep -e '->' *.java

答案 2 :(得分:2)

当您具有“不安全”模式时,最好遵循该模式。它将减少解析错误的变化-它将选项与模式明确分开

grep [options] -- "REGEXP" files

在这种情况下

grep -F -- "->" *.java

答案 3 :(得分:1)

您可以使用<form asp-action="Edit" method="post" enctype="multipart/form-data"> <input type="hidden" asp-for="ProductID" /> <div class="form-group"> <h4><label asp-for="Image"></label></h4> <input asp-for="Image" type="file" class="form-control" /> </div> 来转义\字符,如果不转义,它会被解释为命令行参数的指示符:-

答案 4 :(得分:1)

您始终可以将 weird 符号封装在正则表达式括号([])中。

$ grep '[-][>]' file

在这种情况下,这就是我要做的事情。有一个问题,OP现在确定是什么问题,是连字符(-还是大于号(>),封装!< / p>

但是,这里的问题是连字符。连字符通常表示命令/实用程序选项。实用程序grep看到其参数之一以连字符开头,“嘿,这里是一个选项,让我们对其进行处理” 。它检查选项,看到>,然后说“对不起,没有办法!”

由于上述原因,Posix标准引入了双重连字符,具有以下要求:

  

识别--的要求是因为符合标准的应用程序需要一种方法来屏蔽其操作数,使其不受实现可能提供的扩展的任意选项的影响。例如,如果标准实用程序foo被列为不带任何选项,并且应用程序需要使用前导为其提供路径名,则可以安全地将其设置为:

foo -- -myfile
     

并避免将-m用作扩展名。

     

来源:POSIX.1-2017 Utility Description Defaults

Posix.1-2017在编写自己的实用程序时也将其作为指南:

  

准则10:应该接受不是选项参数的第一个--参数作为指示选项结束的定界符。以下所有参数都应视为操作数,即使它们以-字符开头。

     

来源:POSIX.1-2017 Utility Syntax Guidelines

可以在BashFAQ 035中看到此准则的实现。

因此,解决该问题的真正方法是:

$ grep -- '->' file