我想找出使用lambda表达式的Java文件列表。为此,我想grep表示“->”。一些类似于我的查询得到的响应是grep应该与-F选项一起使用。当我这样做时:
grep -F "->" *.java
我收到错误消息:
grep: invalid option -- >
我正在使用MacOS Darwin。
答案 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在编写自己的实用程序时也将其作为指南:
准则10:应该接受不是选项参数的第一个
--
参数作为指示选项结束的定界符。以下所有参数都应视为操作数,即使它们以-
字符开头。
可以在BashFAQ 035中看到此准则的实现。
因此,解决该问题的真正方法是:
$ grep -- '->' file