减号是公认就像一个选项

问题描述:

如果我写减号是公认就像一个选项

grep -v "-NO" file 

它说

的grep:无效选项 - 'N'

所以我需要写grep -v -- "-NO" filegrep -v "\-NO" file

但是,为什么它认为-作为选项,如果它是双引号?

+2

在将参数传递给'grep'之前,在名为[Quote Removal]的步骤中(http://www.gnu.org/software/bash/manual/bashref.html#Quote去除 - )。另请参阅[简单命令扩展](http://www.gnu.org/software/bash/manual/bashref.html#Simple-Command-Expansion)。所以,'grep'确实不会看到这些引号。 –

+3

@gniourf_gniourf我认为你可以发表评论作为答案。 – melpomene

在将参数传递给grep之前,在shell中删除引号(在名为Quote Removal的步骤中)。另见Simple Command Expansion。所以,真的,grep从来没有看到这些引号。

+0

但这只是一个解释。如何使用带有负号的'grep'模式然后... – koras

+0

@koras:在OP中给出您的问题的答案:使用'--'标记选项的结尾,例如'grep -v - “ - 没有“文件”。 '--'后的所有内容都不会被'grep'解释为选项。 –

+0

不幸的是它不起作用。例如,当我列出进程时,我试图grep一些更复杂的东西,例如'ssh -D *:10132 -no-StrictHostKeyChecking = no -o UserKnownHostsFile =/dev/null'。 – koras