运行以下grep命令时,我得到奇怪的结果,首先是" 1.txt"的内容。是这样的:
401 f
-- -----
然后,当使用cat 1.txt | grep -v -- --
时,结果为401 f
,命令为cat 1.txt | grep -v -- -
,结果也为401 f
。我知道第一个字段中的--
是grep的过滤模式,所以我认为第二个字段中的--
和-
都可以表示标准输出,对吧?然后我运行cat 1.txt | grep -v --
,这里我省略了stdout,但这是错误的,信息是Try 'grep --help' for more information
。虽然我也运行cat 1.txt | grep -v -
,但这样做的结果是401 f
。
要进一步了解grep中--
和-
之间的差异,我会运行cat 1.txt | grep --
,它会显示Try 'grep --help' for more information
。 cat 1.txt | grep -
获得结果-- -----
。
cat 1.txt | grep -v '--' --
cat 1.txt | grep -v '--' -
cat 1.txt | grep -v '--'
cat 1.txt | grep -v '-'
cat 1.txt | grep '--'
cat 1.txt | grep '-'
最后,我得到了相同的结果。
我的问题可能是
第二个字段中--
和-
之间的区别是什么?
为什么我不能使用--
模式在行中获取-- -----
?
答案 0 :(得分:2)
--
用于表示选项的结束。
来自manual:
特殊论点" - "无论扫描模式如何,强制选项扫描结束。
因此在实践中,您的第一个--
参数将被忽略。如果您想要--
grep,则需要grep .... -- --
答案 1 :(得分:2)
你得到你得到的,因为你使用“-v”,这意味着“显示任何不匹配的东西”。
关于 - 又名。双破折号:
double-dash是底层getopt库的信号,它处理命令行选项的解析,双击之后的所有内容都必须被视为文字字符串而不是参数,而不管前导的破折号。 例如
你的grep基本上是在寻找的任何东西而不是“ - ”。