带有`-file name`的GNU grep给出了错误`ile name:没有这样的文件或目录`
当我试图找到pattern'-file name'时,我收到了奇怪的错误消息带有`-file name`的GNU grep给出了错误`ile name:没有这样的文件或目录`,grep,Grep,当我试图找到pattern'-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
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文件名。
我阅读了有关grep和正则表达式的文档,但找不到原因。
乍一看,在我看来,文件名也应该起作用
这是GNU grep bug吗?还是普通的linux风格
GNU grep版本是2.5.4在模式之前使用
-e
,以防止将其解释为选项
-e PATTERN, --regexp=PATTERN
Use PATTERN as the pattern; useful to protect patterns beginning
with -.
因此,您的代码应该是:
grep -e -file-name README.txt
您的转义尝试只到达shell,而不是
grep
,这就是为什么您没有看到任何更改的行为。这是标准的POSIX参数处理。有两种解决方法:
grep -e -file-name README.txt
grep -- -file-name README.txt
第一个参数将下一个参数标记为正则表达式,即使它看起来像一个选项;第二个选项关闭选项解析,因此
--
之后的任何内容都将被视为参数而不是选项。谢谢您的友好回答:D
-e PATTERN, --regexp=PATTERN
Use PATTERN as the pattern; useful to protect patterns beginning
with -.