我正在尝试理解并阅读手册页。然而,每天我发现更多不一致的语法,我想澄清我是否误解了一些东西。
在手册页中,它指定grep
的语法为grep [OPTIONS] [-e PATTERN]... [-f FILE]... [FILE...]
我有一个工作示例,递归搜索目录中的所有文件以查找关键字。
grep -rnw . -e 'memes
现在这个例子有效,但我发现它与手册页非常不一致。目录(手册页编写为[FILE...]
但指定手册页中if file ==目录的用例)位于最后。然而,在此示例中,它位于[OPTIONS]
之后和[-e PATTERN]...
之前。为什么允许这样做,它不遵循使用此命令的指定正则表达式?
答案 0 :(得分:1)
为什么允许这样做,它不遵循使用此命令的指定正则表达式?
联机帮助页的SYNOPSIS
部分中的行不应被理解为严格的正则表达式,而是作为实用程序参数语法的简要说明。
根据特定的应用程序,解析器可能或多或少地灵活接受其选项。毕竟,每个程序都可以为他们的参数实现他们喜欢的语法。因此,有些人可能允许在开头,结尾或甚至在文件之间的选项(通常有处理可能出现的歧义的方法,例如从-
读取标准输入,文件名以{{1开头}} ...)。
现在,当然,有一些常见的方法可以做到这一点。例如,POSIX.1-2017 12.1 Utility Argument Syntax说:
本节描述标准实用程序的参数语法,并介绍了POSIX.1-2017中用于描述实用程序处理的参数的术语。
在您的特定情况下,-
(可能是GNU的grep
)的实现允许在文件列表之间传递选项,如您所发现的那样。
有关详细信息,请参阅:
答案 1 :(得分:0)
你也可以利用。 grep'string'* -lR