当我试图找到模式'-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
答案 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
这就是您没有看到任何更改行为的原因。