Bash - grep命令与手册页不一致

时间:2018-05-07 22:57:33

标签: grep manpage

我正在尝试理解并阅读手册页。然而,每天我发现更多不一致的语法,我想澄清我是否误解了一些东西。

在手册页中,它指定grep的语法为grep [OPTIONS] [-e PATTERN]... [-f FILE]... [FILE...]

我有一个工作示例,递归搜索目录中的所有文件以查找关键字。

grep -rnw . -e 'memes

现在这个例子有效,但我发现它与手册页非常不一致。目录(手册页编写为[FILE...]但指定手册页中if file ==目录的用例)位于最后。然而,在此示例中,它位于[OPTIONS]之后和[-e PATTERN]...之前。为什么允许这样做,它不遵循使用此命令的指定正则表达式?

2 个答案:

答案 0 :(得分:1)

  

为什么允许这样做,它不遵循使用此命令的指定正则表达式?

联机帮助页的SYNOPSIS部分中的行不应被理解为严格的正则表达式,而是作为实用程序参数语法的简要说明。

根据特定的应用程序,解析器可能或多或少地灵活接受其选项。毕竟,每个程序都可以为他们的参数实现他们喜欢的语法。因此,有些人可能允许在开头,结尾或甚至在文件之间的选项(通常有处理可能出现的歧义的方法,例如从-读取标准输入,文件名以{{1开头}} ...)。

现在,当然,有一些常见的方法可以做到这一点。例如,POSIX.1-2017 12.1 Utility Argument Syntax说:

  

本节描述标准实用程序的参数语法,并介绍了POSIX.1-2017中用于描述实用程序处理的参数的术语。

在您的特定情况下,-(可能是GNU的grep)的实现允许在文件列表之间传递选项,如您所发现的那样。

有关详细信息,请参阅:

答案 1 :(得分:0)

你也可以利用。 grep'string'* -lR