带有`-file-name`的GNU grep给出了错误`ile-name:没有这样的文件或目录`

时间:2011-03-23 10:35:07

标签: grep

当我试图找到模式'-file-name'时,我收到了奇怪的错误消息

jaewan@lymose1:~$ grep -file-name README.txt 
grep: ile-name: No such file or directory
jaewan@lymose1:~$ grep \-file-name README.txt 
grep: ile-name: No such file or directory
jaewan@lymose1:~$ grep '-file-name' README.txt 
grep: ile-name: No such file or directory
jaewan@lymose1:~$ grep '\-file-name' README.txt 
-- works well

如果我不使用'-file-name',我认为grep将'-file-name'解释为-f ile-name。 我阅读有关grep和正则表达式的文档,但我找不到原因。 在我看来,一目了然,-file-name也应该有效。

这是一个GNU grep错误吗?还是常见的linux风格?

GNU grep版本是2.5.4

2 个答案:

答案 0 :(得分:4)

这是标准的POSIX参数处理。两种方式:

grep -e -file-name README.txt
grep -- -file-name README.txt

第一个将下一个参数标记为正则表达式,即使它看起来像一个选项;第二个关闭选项解析,因此--之后的任何内容都被视为参数而不是选项。

答案 1 :(得分:2)

在模式之前使用-e以防止将其解释为选项。

   -e PATTERN, --regexp=PATTERN
          Use PATTERN as the pattern; useful to protect patterns beginning
          with -.

因此,您的代码应为:

grep -e -file-name README.txt 

您的转义尝试只到达了shell,而不是grep这就是您没有看到任何更改行为的原因。