为什么这个 grep -F 不起作用?
Why does this grep -F not work?
我在工作中广泛使用 grep -F
(CentOS) 来忽略匹配中的正则表达式模式。现在这是我在家里尝试的 (Ubuntu 14.04):
$ cat file
Here is
the -F
you were looking
for!
~$ grep -F '-F' file
_
下划线是为了显示一个闪烁的光标,就好像它在等待输入一样。可能是因为 Ubuntu 的 grep
没有遵循所有 POSIX 开关(我读到 -F
是由 POSIX 指定的)或者我正在制作一个哪里弄错了?'
=====更新======
有趣的是,它仅在 -F
后有换行符时才会失败。如果将文本更改为 -F option
,则该行匹配。 grep 中的错误?
两次指定相同的参数没有效果,所以
grep -F '-F' file
与 grep -F file
相同,它当然会在其标准输入中搜索固定字符串 file
。
单引号是转移注意力。它们保护 -F
免受 shell 的任何扩展(如全局扩展、变量扩展、命令替换等),并在 grep
之前被 shell 删除看到 -F
.
您需要做的是使用 grep
的 -e pattern
参数:
grep -F -e '-F' file
鉴于该上下文,-F
将被解释为模式。单引号仍然是多余的。您可以对每个其他 arg 进行单引号。我把它们留在里面是因为它可以帮助人们乍一看就得出正确的结论,而且引用将来 可能 包含 shell 元字符的东西通常不是坏习惯脚本的版本,即使它当前是安全的。
我在工作中广泛使用 grep -F
(CentOS) 来忽略匹配中的正则表达式模式。现在这是我在家里尝试的 (Ubuntu 14.04):
$ cat file
Here is
the -F
you were looking
for!
~$ grep -F '-F' file
_
下划线是为了显示一个闪烁的光标,就好像它在等待输入一样。可能是因为 Ubuntu 的 grep
没有遵循所有 POSIX 开关(我读到 -F
是由 POSIX 指定的)或者我正在制作一个哪里弄错了?'
=====更新======
有趣的是,它仅在 -F
后有换行符时才会失败。如果将文本更改为 -F option
,则该行匹配。 grep 中的错误?
两次指定相同的参数没有效果,所以
grep -F '-F' file
与 grep -F file
相同,它当然会在其标准输入中搜索固定字符串 file
。
单引号是转移注意力。它们保护 -F
免受 shell 的任何扩展(如全局扩展、变量扩展、命令替换等),并在 grep
之前被 shell 删除看到 -F
.
您需要做的是使用 grep
的 -e pattern
参数:
grep -F -e '-F' file
鉴于该上下文,-F
将被解释为模式。单引号仍然是多余的。您可以对每个其他 arg 进行单引号。我把它们留在里面是因为它可以帮助人们乍一看就得出正确的结论,而且引用将来 可能 包含 shell 元字符的东西通常不是坏习惯脚本的版本,即使它当前是安全的。